我正在创建一个具有用户可设置属性的基本类,该属性必须是int
类型。我如何检查用户传入的类型实际上是一个整数并抛出异常,如果它是其他类型的?
class MyClass
{
private int _amount;
public int Amount
{
get
{
return _amount;
}
set
{
Type t = typeof(value);
if(t == typeof(int))
{
_amount = value;
}
else
{
throw new ArgumentException("Amount must be an integer", "Amount");
}
}
}
}
Visual Studio IDE说The type or namespace value could not be found
。但我正在使用指定in this SO question的类型检查。我正在使用类型,因此检查将在编译时进行。
答案 0 :(得分:3)
value
是一个变量,因此typeof
对它没有意义(如链接问题所示)。
你需要:
set {
Type t = value.GetType();
if (t == typeof(int)) {
_amount = value;
} else {
throw new ArgumentException("Amount must be an integer", "Amount");
}
}
请注意,这将在编译时从不失败,因为setter在执行之前并未实际运行。我不确定您在此处阻止了什么,如果您将double
或float
传递给它,则类型系统将执行正确的转换。整个检查应该是不必要的。
答案 1 :(得分:2)
除了值必须是整数之外,因为该属性被声明为整数!
您需要对值使用.GetType()
方法。 typeof
是一个编译时操作。
所以
Type t = value.GetType();
但是,如果value为null,则会崩溃...