2017-03-24 4 views
0

정적 위임 명령이 있습니다. 나는 생성자에게 bool을 전달하고있다. 그러나 런타임 예외가 발생합니다.Prism DelgateComand가 예외를 throw합니다.

public static class myViewModel 
{ 
    public static ICommand myCommand {get; private set;} 

    static myViewModel 
    { 
     //If I change the bool to Object, or to Collection type, no exception assuming that I change myMethod parameter as well to the same type. 
     myCommand = new DelegateCommand<bool>(myMethod); 
    } 

    private static void myMethod (bool myBoolean) 
    { 
     //To Do 
    } 
} 

답변

2

항상 항상, 항상 당신이있어 예외 어떤 유형 우리에게, 그리고 예외 메시지 무엇이었다. 모든 사람은 다른 이유로 던져지기 때문에 많은 예외가 있습니다.

그러나이 경우 bool은 값 유형이고 명령을 실행하는 코드는 매개 변수에 null을 전달하는 것입니다. 하지만 당신은 값 형식에 null 캐스팅 할 수 없으며, 그렇게하려고하면 런타임 예외가 발생합니다 같은 원인이됩니다

object o = null; 
// This will compile, but blow up at runtime. 
bool b = (bool)o; 

내가 string이 일 것으로 예측 것이고, int, double, 또는 DateTime을 예외는 bool입니다. 그러나 이러한 세 가지 값 유형 중 하나에 물음표를 추가하면 bool과 동일하게 수정됩니다.

매개 변수 유형을 bool?으로 변경해보십시오. 따라서 null이 허용되는 값이됩니다.

static myViewModel 
{ 
    myCommand = new DelegateCommand<bool?>(myMethod); 
} 

private static void myMethod (bool? myBoolean) 
{ 
    if (myBoolean.HasValue) 
    { 
     MessageBox.Show("myBoolean was not null"); 
    } 

    if (myBoolean.GetValueOrDefault(true)) 
    { 
     MessageBox.Show("myBoolean was either true or null"); 
    } 
} 
+1

감사합니다. 당신은'bool? '에 대해 절대적으로 맞습니다.
그것은'예외 '를 포함시켜야 할 것입니다. 그것을 명심하십시오.
감사합니다. – John

+0

포럼에 문제가 있습니까? 내 이전의 코멘트를 볼 수 있듯이 줄 바꿈을 존중하지 않았습니다. 그것은 텍스트로 그들을 남겼습니다 – John

+0

@ 존 그건 의도적으로입니다. 여기에 코멘트에서 HTML을 사용할 수 없습니다. 과 함께 줄 바꿈을 삽입 할 수 있습니다. Shift + Enter을 입력 할 수 있지만 마크 다운이이를 준수하는지는 알 수 없습니다. 3, 2, 하나를 발견 ... –