我有一个静态委托命令。我正在将bool传递给构造函数。但是,它抛出了运行时异常。
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
}
}
答案 0 :(得分: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");
}
}