나는 ... 반복되어 많은 인터뷰에서 다음과 같은 질문을 ....하지만 여전히 간단한 예제를 설명 할 수있다언제 C#에서 null 입력 가능 유형을 사용해야합니까?
- C#에서 nullable 형식은 무엇입니까?
- C#에서 null 입력 가능 유형을 사용해야하는시기는 언제입니까?
- 간단한 예를 들려 줄 수 있습니까?
의견이 있으십니까?
나는 ... 반복되어 많은 인터뷰에서 다음과 같은 질문을 ....하지만 여전히 간단한 예제를 설명 할 수있다언제 C#에서 null 입력 가능 유형을 사용해야합니까?
의견이 있으십니까?
당신이 nullable 형식을 사용할 수있는 경우에 대한 예를 들어
Using Nullable Types (C# Programming Guide)에서 바라 일반 부울 변수가 두 값을 가질 수있는 방법을 고려한다. "undefined"를 나타내는 값이 없습니다. 많은 프로그래밍 응용 프로그램에서 대부분 데이터베이스 상호 작용 변수는 정의되지 않은 상태에 존재할 수 있습니다. 예를 들어 데이터베이스의 필드에는 true 또는 false 값이 포함될 수 있지만 값은 전혀 포함되지 않을 수 있습니다. 마찬가지로 참조 형식을 null로 설정하여 이 초기화되지 않았 음을 나타낼 수 있습니다.
이지만 모든 참조 (예 : 개체)는 null 일 수 있습니다. 그래서'Nullable'에서'bool'을 boxing하는 것은 왜'Boolean'으로 상자에 넣지 않을까요? 왜 아직도 궁금합니다. –
Null은 "값 없음"또는 "데이터 없음"을 의미합니다. 당신이 사용하거나 사용하고있는 시스템의 컨텍스트에서 "값이 없음"이 유효한 값이면 null 가능 유형을 사용합니다. 이 경우
int? weightOfCargo = TryGetTruckCargoWeight()
는 널 타입 TryGetTruckCargoWeight는()는 null 것을 나타낸다. 이것의 의미는 일반적으로 데이터를 사용할 수 없다는 것입니다 (어쩌면 트럭이 없거나 무게가 측정되지 않았을 수도 있습니다). true와 false :
예를 들어 다음과 같은 고려 :
도구는 UI를 통해 지정된 설정이 있습니다. 그러나이 도구는 명령 줄에서 실행할 수도 있으며 UI에 지정된 설정은 명령 줄을 통해 무시할 수 있습니다. 그래서 코드는 다음과 같다 :
bool? setting1;
... 프로세스 명령 줄에서 지정된 설정을하는 경우 수행
나중에setting1.Value = setting;
...
if(setting1.HasValue)
ui.setting1 = setting1.Value
이 지정된 값을 사용 할 때마다 null 값을 나타 내기 위해 :
* 값을 나타내지 않는 DateTime minimumvalue
* -1 r 정수
다음 Nullable 형식 더 나은 선택이 될 것입니다.
// to replace
// if(foo.Id > 0)
if(foo.Id.HasValue)
{
Update(foo);
}
else
{
Insert(foo);
}
우리 모두가 C#을
에 refrence 유형 •의 두 가지 종류가 있습니다 알고
•
참조 유형이 존재하지 않는 값 (NULL)하지만 Vaue 형식으로 표현 될 수있는 값 종류, 그러나 수 없습니다 NULL 값을 나타냅니다. 예를 들어
문자열 이후
참조 유형은 null를
String s=null; //ok
를 선언 할 수 있지만이 같은 INT32로 값 유형을 선언하려고하면이 produceses 컴파일러 오류를 null하는 것입니다
Int32 i=null; // compiler error
값 형식에서 null을 나타내려면 Nullable 형식이라는 특수 구문을 사용해야합니다. 그것은? 상징. nullable 형식을 사용 commanly
Int32? I=null; //now its ok
이제 시나리오는 CALSS이 널 열이있는 테이블로 맵 데이터베이스 프로그래밍에 있습니다.
• 열이 (전자 메일 주소 및 고객 주소)와 같은 String 유형의 참조 유형 인 경우 C#
에서 null로 정의 할 수 있으므로 문제가 없습니다. • 그러나 열이 두 배인 값 유형 인 경우 as (고객 계정 잔액)으로, nullable 형식을 사용하지 않고 C#에 매핑 할 수 없습니다. 데이터베이스에서 고객 테이블 예컨대
// 맵
는
public class Customer
{
...
public decimal? AccountBalance;
}
@Vijay : string은 참조 유형입니다. 가치 유형이 아님 – Jehof
작은 수정 : 실제로는 3 가지 유형이 있습니다. 포인터 유형은 어떻습니까? :) http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx –
@Jehof : 명백한 오자를 지적 해 주셔서 감사합니다. –
C#을 데이터 형식의 두 가지 유형이 있습니다. 값 유형 및 참조 유형. 문자열은 참조 유형이고 int는 값 유형입니다. 참조 유형은 string s = null;
과 같이 널 값으로 지정 될 수 있습니다. 그러나 널 값을 정수에 직접 할당 할 수는 없습니다. like int a = null //
값 유형이 널 (NULL) 값을 허용하도록하려면 널 (null) 입력이 사용됩니다. 이 Null을 허용하기 위해, ?
가
? a = null;//ok.
에 추가하여 데이터베이스 테이블가에 널 (NULL) 열을 포함 할 때 우리는 실제 시나리오에 대해 이야기하면 나는 생각하고 당신은 DB 엔티티 매핑 등의 DTO (데이터 전송 개체)를 작성해야 . 이러한 시나리오에서는 엔티티 클래스에서 정확히 동일한 데이터 유형 매핑을 가져와야합니다. 이러한 요구 사항을 달성하기 위해 nullable 유형은 정확히 동일한 매핑을 작성하고 사용자가이 시나리오에서 쉽게 작업 할 수있게 해줍니다.
감사합니다.
하나 더 예 :
상상, 당신은 당신의 BLL에 GetArticles
방법을 만들어야합니다. 이 메서드는 날짜 기간 (from
및 to
인수), 검색 문자열 (search
인수) 및 문서 범주 (categoryId
인수)와 같은 인수를 취해야합니다. 이 모든 인수는 선택 사항입니다. 따라서 어떤 경우에는 from
및 search
인수 만 정의하고 다른 인수는 categoryId
뿐입니다.
이렇게하려면 필요한 인수 조합을 사용하여 GetArticles
메서드에 많은 오버로드를 만들 수 있습니다.다른 방법은이 경우에만 하나의 방법 GetArticles(DateTime? from, DateTime? to, string search, int? categoryId)
을 정의하는 것입니다. 이 경우 인수가 null
이면 건너 뜁니다.
내가 .NET 4.0
이라는 새로운 기능에 대해 알고있는 이유는 optional parameters and named arguments이지만 그 전에는 멋진 해결 방법이었습니다.
가능한 복제본은 http://stackoverflow.com/questions/1550909/coding-practices-for-c-nullable-type – Ether