2012-02-01 4 views
23

nullable bool 값을 변환하려고하는데이 오류가 발생합니다. 예를 들어bool 형식을 암시 적으로 변환 할 수 없습니까?

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?) 

:

public virtual bool? MyBool 
    { 
    get; 
    set; 
    } 

if (!MyBool){} 
+2

즉, null 허용 bool은 혼란 스럽습니다. (그냥 SQL 좀 봐) – SLaks

+0

나는 이것이 너무 혼란 스럽다고 생각하지 않는다, 그것은 단지 Ternary Logic이다 : http://en.wikipedia.org/wiki/Three-valued_logic - 나는 그것이 무언가의 개념을 좋아하기 때문에 실제로 그것을 좋아한다. 가치가없는. 즉, 초기화되지 않은 상태와 초기화 된 상태입니다. – dyslexicanaboko

답변

30

오류 상태로, 당신은 조건에 bool?을 사용할 수 없습니다. (이 null 있다면 어떻게 될까?)

대신에, 당신은 당신이 null을 포함 할 것인지 여부에 따라 if (MyBool != true) 또는 if (MyBool == false)를 작성할 수 있습니다. 그것은 참으로 시작하는 값을 가질 않습니다

if (!MyBool.Value) { } 

그러나 테스트해야합니다 : 당신은 예를 들어 MyBool.Value

를 사용할 필요가

+5

또 다른 유효한 검사는'MyBool ?? false'이지만, 일반적으로 MyBool.GetValueOrDefault()를 선호합니다. –

+0

@AnthonyPegram : 그러나, 부정을 위해 여분의 괄호가 필요하며, 또한 더 혼란 스럽습니다. – SLaks

+0

첫 번째 의견에 동의하지 않지만 두 번째 방법을 사용하거나 이해하기가 더 어려워 보이지 않습니다. 일반적으로 Linq-to-EF 쿼리에서는 메서드가 지원되지 않기 때문에 true/false와는 직접적인 비교를하지 않습니다. –

9

(당신은 것을 설명하는 주석을 추가해야합니다) . MyBool에 값이 있고 false 인 지 테스트합니다.

if (MyBool.HasValue && !MyBool.Value) { } 

코드 블록이 할당되지 않았거나 false 인 경우 코드 블록을 실행하는 것이 좋습니다.

if (!MyBool.HasValue || !MyBool.Value) { } 

질문은 정말 당신이 진정 그렇다면 당신은 null, true or false의 3 개 가능한 조건을 처리하는 방법, null 허용 부울 변수를 가지고 의도 여부로 요약된다.

2

값이 있는지 확인해야합니다. MyBool == null이라면 무엇을하고 싶습니까?

if(MyBool.HasValue && !MyBool.Value) // MyBool is false 
if(MyBool.HasValue && MyBool.Value) // MyBool is true 
if(!MyBool.HasValue) // MyBool is null 
관련 문제