使用typeof在属性赋值期间检查值的类型

时间:2014-07-11 16:21:38

标签: c#

我正在创建一个具有用户可设置属性的基本类,该属性必须是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的类型检查。我正在使用类型,因此检查将在编译时进行。

2 个答案:

答案 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在执行之前并未实际运行。我不确定您在此处阻止了什么,如果您将doublefloat传递给它,则类型系统将执行正确的转换。整个检查应该是不必要的。

答案 1 :(得分:2)

除了值必须是整数之外,因为该属性被声明为整数!

您需要对值使用.GetType()方法。 typeof是一个编译时操作。

所以

Type t = value.GetType();

但是,如果value为null,则会崩溃...