2017-11-29 53 views
2

클래스에 null이 될 수있는 선택적 속성이있을 때 다음 패턴을 사용하여 지연시킵니다. 또한 정수와 같은 값 유형에 대한 변형을 사용합니다.nullable enum에 대한 지연 속성

string myType; 
    public string MyType 
    { 
     get { return myType ?? (myType = GetMyType()); } 
    } 

내가 열거와 동일한 작업을 수행하려고 해요 - 나는 패턴이 같은 것으로 예상했을 것이다 :

MyEnum? myEnum; 
    public MyEnum MyEnum 
    { 
     get { return myEnum ?? (myEnum = GetMyEnum()); } 
    } 

는 그러나, 나는라는 오류가있어 내가 할 수있는 그 이 변환을 명시 적으로 수행하지 마십시오. 누구든지 내가 어떻게 돌아갈 수 있는지에 대한 아이디어를 얻었습니까? MyEnum?MyEnum?myEnum 때문에

+0

뭐 'GetMyEnum'가 리턴합니까? – HimBromBeere

답변

2

(myEnum = GetMyEnum()) 할당의 결과이고; (...) 뒤에 .Value 또는 .GetValueOrDefault()을 추가해야합니다.

이 예를 들어, 작동 :

public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()).GetValueOrDefault(); 

처럼 :

public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? 0; 

또는 C#을 7.1 :

public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? default; 
+0

@MatthewWatson 예; 개인적으로 나는'GetValueOrDefault()'를 선호한다 - 가지를 피한다.하지만'.Value'는 읽기가 더 쉽다. –

+0

죄송합니다. 가장 최근의 편집을 보았을 때 삭제했습니다. :) –

+0

아, 나는 표에서 벗어난 길이었다 - 더 많이 더하려고 노력하고 있었느냐?? 및? : 운이없는 콤보 - 빠른 응답에 감사드립니다. –

0

봅니다 캐스팅 :

private MyEnum? _myEnum; 

public MyEnum MyEnum 
{ 
    get { return _myEnum ?? ((MyEnum) (_myEnum = GetMyEnum())); } 
}