C# - how to determine whether a Type is a number

后端 未结 18 2308
傲寒
傲寒 2020-11-28 22:47

Is there a way to determine whether or not a given .Net Type is a number? For example: System.UInt32/UInt16/Double are all numbers. I want to avoid a long switc

18条回答
  •  甜味超标
    2020-11-28 23:48

    Try this:

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

    The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Char, Double,and Single.

    Taking Guillaume's solution a little further:

    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;
      }
    }
    

    Usage:

    int i = 32;
    i.IsNumericType(); // True
    
    string s = "Hello World";
    s.IsNumericType(); // False
    

提交回复
热议问题