2010-01-15 2 views
6

System.DirectoryServices.AccountManagement로 작업하는 동안 방금 일부 코드를 실행했습니다.C#에서`DateTime? '형식의`?`는 무엇입니까?

public DateTime? LastLogon { get; } 

무엇입니까? 에 대한 DateTime 이후.

?? Operator (C# Reference)에 대한 참조가 있지만 동일한 것은 아닙니다. (280Z28 : 여기에 Using Nullable Types에 대한 올바른 링크가 있습니다.)

+1

게시물의 링크는 실제로 ?? 연산자는 상관 없지만 매우 멋진 null 병합 연산자입니다. –

+2

자세한 내용은 C# 사양의 4.1.10 절을 참조하십시오. –

+0

@Charlie : 나는 제목에서 그것을 reworded 때까지 그것은 양의 옷에 중복되었다고 생각합니다. –

답변

27

?는 (모든 값 형식에 Nullable<T> 구조에 대한 그것의 속기 및 적용) 그것을 nullable 형식 수 있습니다.

Nullable Types (C#)

참고 :

?? 당신은 완전히 다른 널 병합 연산자에 링크.

+4

여기서 가장 중요한 점 중 하나는 이것이 DateTime 유형에 특별한 것이 아니라는 것입니다. 그것은 int, decimal 및 다른 보통 nullable이 아닌 유형에서도 마찬가지로 작동합니다. –

4

?은이 경우 연산자가 아니며 유형의 일부입니다. 구문

DateTime? 

은 그래서 LastLogonNullable<DateTime>을 반환하는 속성입니다 선언

Nullable<DateTime> 

의 약자입니다. 자세한 내용은 MSDN을 참조하십시오.

?? 여기에 linked과 다소 관련이 있습니다. 그것은 다음과 같은 의미를 갖는 null-coalescing 연산자입니다. xnull이 그렇지 않으면 x로 평가하는 경우 표현

x ?? y 

y로 평가합니다. 여기서 x은 참조 유형 또는 null 입력 가능 유형일 수 있습니다.

0

것은 Nullable<DateTime>에 대한 바로 가기입니다. 이러한 유형을 사용하는 메소드는 COM에 노출 될 수 없다는 것을 알고 있어야합니다.

0

다른 사람이 언급 했습니까? 구문을 사용하면 해당 형식을 nullable로 만들 수 있습니다.

nullable 형식으로 작업 할 때 명심해야 할 중요한 몇 가지 (the docs에서 촬영,하지만 난 여기를 호출하는 것이 도움이 될 것이라고 생각) :

  • 당신은 일반적으로 읽기 전용 사용 null 가능 유형을 사용하는 경우 ValueHasValue 속성
int? num = null; 
if (num.HasValue == true) 
{ 
    System.Console.WriteLine("num = " + num.Value); 
} 
  • 당신은 nullable 형식에 기본 값을 할당 널 병합 연산자를 사용할 수 있습니다. 이것은 매우 편리합니다.

다른 사람이 언급 한 것처럼

int? x = null; 
int y = x ?? -1; 
0

, ?declaring a value type as nullable에 사용됩니다.

이 상황의 몇 중대하다 :

  • 입력 가능 필드에 저장된 null 값을 가진 데이터베이스에서 데이터를 당기는 (즉, .NET 값 형식에 매핑) 때
  • 을 "지정되지 않음"또는 "발견되지 않음"을 나타낼 필요가 있습니다.

    class CustomerFeedback 
    { 
        string Name { get; set; } 
        int? Age { get; set; } 
        bool? DrinksRegularly { get; set; } 
    } 
    

    AgeDrinksRegularly에 대한 nullable 형식의 사용은로 사용할 수 있습니다 :

예를 들어, 비 필수 일련의 질문을 물었다 고객으로부터 피드백을 나타 내기 위해 사용하는 클래스를 고려 고객이 이러한 질문에 대답하지 않았 음을 나타냅니다.

예를 들어 사용자가 로그온 한 적이 없다는 것을 의미하는 LastLogon에 대해 null 값을 사용합니다.

관련 문제