0

我有一个静态委托命令。我将一个布尔值传递给构造函数。但是,它会引发运行时异常。

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
    }
}
4

1 回答 1

2

总是,总是,总是告诉我们你得到了什么类型的异常,以及异常消息是什么。他们有很多很多不同的例外,因为每个例外都是出于不同的原因而抛出的。

但在这种情况下,问题似乎在于它bool是一个值类型,而执行命令的代码正在向它传递null一个参数。但是您不能强制null转换为值类型,并且尝试这样做会导致运行时异常:

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

我预测这string会起作用,并且int, double, orDateTime会导致与 . 相同的异常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");
     }
}
于 2017-03-24T13:08:46.053 回答