2016-09-12 3 views
0

는 다음 코드 줄을 고려암시 적으로 SqlBoolean 형식을 bool로 변환 할 수 없습니까?

System.Data.SqlTypes.SqlBoolean sb = true; // (1) 

bool b = sb; // (2) 

bool b = sb ? true : false; // (3) 

if (sb) // (4) 
{ 

} 

(1) 잘 작동, 내가 때문에 public static implicit operator SqlBoolean(bool x)의 같아요.

암시 '부울'에 유형 'System.Data.SqlTypes.SqlBoolean을'변환 할 수 없습니다 :

(2)는 나에게 다음과 같은 오류 (CS0266)를 제공합니다. 명시 적 변환 (당신이 캐스트를 누락?)

내가 SqlBoolean-bool에서 변환 (public static explicit operator bool(SqlBoolean x)) 명시적인 것을 이해 존재 가능성 때문에 SqlBoolean.IsNull에 해당 할 수 있습니다.

그런데 왜 (3)(4)이 작동합니까? 이는 암시 적 전환처럼 보입니다.

+0

당신은'부울 B = (BOOL) SB를 시도 참조;'? –

+0

나는 그것이 얻을 수있는만큼 명시 적으로 당신의 요지를 얻지 못합니다. – xehpuk

+0

나는 명시적인 변환을 사용하여 달성 할 수있는 유일한 방법이 있다고 말하고 싶었다. –

답변

6

나는 SqlBoolean.IsNull이 true 일 수 있기 때문에 bool에서 SqlBoolean 로의 변환이 명시적임을 이해합니다 (공용 정적 명시 적 연산자 bool (SqlBoolean x)).

정확하므로 SqlBooleanbool으로 전송하려면 명시 적으로 지정해야합니다.
그러나 SqlBooleantruefalse 연산자를 정의합니다. (true operator)
if 문과 3 진 연산자는 모두 true 연산자를 호출하여 부울 값을 가져옵니다. 그들은 변환 연산자를 호출하지 않습니다.

당신은 모든 종류의 작업을 할 수 있습니다 경우 명령문과 :

public class Program 
{ 
    public static void Main() 
    { 
     Program p = new Program(); 
     if (p) { 
      //prints 'calling true operator' 
     } 
    } 

    public static bool operator true(Program p) { 
     Console.WriteLine("calling true operator"); 
     return true; 
    } 

    public static bool operator false(Program p) { 
     Console.WriteLine("calling false operator"); 
     return false; 
    } 

} 
+0

나는이 연산자에 대해 몰랐다. 흥미 롭다. 이제'거짓 '연산자가 무엇에 좋은지 알아 내려고합니다. '&& '연산자를 평가하는 데 사용 된 것처럼 보입니다. – xehpuk

+0

예, 'And'가 사용했습니다. –

0

사례 # 1, # 3, # 4 작품을 SqlBoolean 그것이 부울처럼 행동/상호 작용할 수 있도록 true와 false 연산자를 구현하므로 .

bool이 구현할 SqlBoolean 연산자가 없으므로 bool이 SqlBoolean과 상호 작용하도록 지시 할 때 수행 할 작업을 알지 못하기 때문에 Case # 2가 작동하지 않습니다. 진정한 거짓 연산자에 대한 자세한 내용은

https://msdn.microsoft.com/en-us/library/6x6y6z4d.aspx

관련 문제