2017-03-24 5 views
0

私は静的委譲コマンドを持っています。私はboolをコンストラクタに渡しています。ただし、実行時例外がスローされています。Prism DelgateComandが例外をスローする

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が動作することを予測し、intdouble、またはDateTimeは同じの原因になりますよ例外はboolです。しかし、これらの3つの値の型のいずれかに疑問符を付けると、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? 'について絶対に正しいです。
それは驚くべきことではありません、私は' exception'を含めるべきでした。それを覚えておいてください。
ありがとうございました – John

+0

フォーラムに問題がありますか?あなたが私の前のコメントを見ることができるので、それは改行を尊重しませんでした。それはテキストとしてそれらを残しました – John

+0

@ジョンこれは仕様です。コメントにはHTMLを使用できません。 で改行を挿入することができます。Shift + Enterですが、マークダウンがそれを尊重するかどうかわかりません。 3つ、2つ、1つを見つける... –

関連する問題