typeof()检查数值

时间:2012-01-12 13:37:21

标签: c# winforms decimal typeof

检查typeof()在数学上是否可用(数字)的最简单方法是什么。

我是否需要使用TryParse method或通过此检查:

if (!(DC.DataType == typeof(int) || DC.DataType == typeof(double) || DC.DataType == typeof(long) || DC.DataType == typeof(short) || DC.DataType == typeof(float)))
     {
           MessageBox.Show("Non decimal data cant be calculated");
           return;
     }

如果有更简单的方法来实现这一点,您可以自由建议

2 个答案:

答案 0 :(得分:10)

不幸的是,没什么可做的。但是从C#3开始,你可以做一些更高级的事情:

public static class NumericTypeExtension
{
    public static bool IsNumeric(this Type dataType)
    {
        if (dataType == null)
            throw new ArgumentNullException("dataType");

        return (dataType == typeof(int)
                || dataType == typeof(double)
                || dataType == typeof(long)
                || dataType == typeof(short)
                || dataType == typeof(float)
                || dataType == typeof(Int16)
                || dataType == typeof(Int32)
                || dataType == typeof(Int64)
                || dataType == typeof(uint)
                || dataType == typeof(UInt16)
                || dataType == typeof(UInt32)
                || dataType == typeof(UInt64)
                || dataType == typeof(sbyte)
                || dataType == typeof(Single)
               );
    }
}

所以您的原始代码可以这样写:

if (!DC.DataType.IsNumeric())
{
      MessageBox.Show("Non decimal data cant be calculated");
      return;
}

答案 1 :(得分:3)

您可以检查数字类型实现的接口:

if (data is IConvertible) {
  double value = ((IConvertible)data).ToDouble();
  // do calculations
}

if (data is IComparable) {
  if (((IComparable)data).CompareTo(42) < 0) {
    // less than 42
  }
}