有没有一种方法可以确定给定的.Net类型是否为数字?例如:System.UInt32/UInt16/Double都是数字。我想避免Type.FullName上的切换情况很长。

最佳答案

尝试这个:

Type type = object.GetType();
bool isNumber = (type.IsPrimitiveImple && type != typeof(bool) && type != typeof(char));



Guillaume's solution更进一步:
public static bool IsNumericType(this object o)
{
  switch (Type.GetTypeCode(o.GetType()))
  {
    case TypeCode.Byte:
    case TypeCode.SByte:
    case TypeCode.UInt16:
    case TypeCode.UInt32:
    case TypeCode.UInt64:
    case TypeCode.Int16:
    case TypeCode.Int32:
    case TypeCode.Int64:
    case TypeCode.Decimal:
    case TypeCode.Double:
    case TypeCode.Single:
      return true;
    default:
      return false;
  }
}

用法:
int i = 32;
i.IsNumericType(); // True

string s = "Hello World";
s.IsNumericType(); // False

09-25 20:46