But here's an example:
Dim desiredType as Type if IsNumeric(desiredType) then ...
EDIT: I only know the Type, not the Value as a string.
Ok, so unfortunately I have to cycle through the TypeCode.
But this is a nice way to do it:
if ((desiredType.IsArray)) return 0; switch (Type.GetTypeCode(desiredType)) { case 3: case 6: case 7: case 9: case 11: case 13: case 14: case 15: return 1; } ;return 0;
The typeof is an operator keyword which is used to get a type at the compile-time. Or in other words, this operator is used to get the System. Type object for a type. This operator takes the Type itself as an argument and returns the marked type of the argument.
IsNaN() Method in C# In C#, Double. IsNaN() is a Double struct method. This method is used to check whether the specified value is not a number (NaN).
A few years late here, but here's my solution (you can choose whether to include boolean). Solves for the Nullable case. XUnit test included
/// <summary> /// Determines if a type is numeric. Nullable numeric types are considered numeric. /// </summary> /// <remarks> /// Boolean is not considered numeric. /// </remarks> public static bool IsNumericType( Type type ) { if (type == null) { return false; } switch (Type.GetTypeCode(type)) { case TypeCode.Byte: case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.SByte: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: return true; case TypeCode.Object: if ( type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return IsNumericType(Nullable.GetUnderlyingType(type)); } return false; } return false; } /// <summary> /// Tests the IsNumericType method. /// </summary> [Fact] public void IsNumericTypeTest() { // Non-numeric types Assert.False(TypeHelper.IsNumericType(null)); Assert.False(TypeHelper.IsNumericType(typeof(object))); Assert.False(TypeHelper.IsNumericType(typeof(DBNull))); Assert.False(TypeHelper.IsNumericType(typeof(bool))); Assert.False(TypeHelper.IsNumericType(typeof(char))); Assert.False(TypeHelper.IsNumericType(typeof(DateTime))); Assert.False(TypeHelper.IsNumericType(typeof(string))); // Arrays of numeric and non-numeric types Assert.False(TypeHelper.IsNumericType(typeof(object[]))); Assert.False(TypeHelper.IsNumericType(typeof(DBNull[]))); Assert.False(TypeHelper.IsNumericType(typeof(bool[]))); Assert.False(TypeHelper.IsNumericType(typeof(char[]))); Assert.False(TypeHelper.IsNumericType(typeof(DateTime[]))); Assert.False(TypeHelper.IsNumericType(typeof(string[]))); Assert.False(TypeHelper.IsNumericType(typeof(byte[]))); Assert.False(TypeHelper.IsNumericType(typeof(decimal[]))); Assert.False(TypeHelper.IsNumericType(typeof(double[]))); Assert.False(TypeHelper.IsNumericType(typeof(short[]))); Assert.False(TypeHelper.IsNumericType(typeof(int[]))); Assert.False(TypeHelper.IsNumericType(typeof(long[]))); Assert.False(TypeHelper.IsNumericType(typeof(sbyte[]))); Assert.False(TypeHelper.IsNumericType(typeof(float[]))); Assert.False(TypeHelper.IsNumericType(typeof(ushort[]))); Assert.False(TypeHelper.IsNumericType(typeof(uint[]))); Assert.False(TypeHelper.IsNumericType(typeof(ulong[]))); // numeric types Assert.True(TypeHelper.IsNumericType(typeof(byte))); Assert.True(TypeHelper.IsNumericType(typeof(decimal))); Assert.True(TypeHelper.IsNumericType(typeof(double))); Assert.True(TypeHelper.IsNumericType(typeof(short))); Assert.True(TypeHelper.IsNumericType(typeof(int))); Assert.True(TypeHelper.IsNumericType(typeof(long))); Assert.True(TypeHelper.IsNumericType(typeof(sbyte))); Assert.True(TypeHelper.IsNumericType(typeof(float))); Assert.True(TypeHelper.IsNumericType(typeof(ushort))); Assert.True(TypeHelper.IsNumericType(typeof(uint))); Assert.True(TypeHelper.IsNumericType(typeof(ulong))); // Nullable non-numeric types Assert.False(TypeHelper.IsNumericType(typeof(bool?))); Assert.False(TypeHelper.IsNumericType(typeof(char?))); Assert.False(TypeHelper.IsNumericType(typeof(DateTime?))); // Nullable numeric types Assert.True(TypeHelper.IsNumericType(typeof(byte?))); Assert.True(TypeHelper.IsNumericType(typeof(decimal?))); Assert.True(TypeHelper.IsNumericType(typeof(double?))); Assert.True(TypeHelper.IsNumericType(typeof(short?))); Assert.True(TypeHelper.IsNumericType(typeof(int?))); Assert.True(TypeHelper.IsNumericType(typeof(long?))); Assert.True(TypeHelper.IsNumericType(typeof(sbyte?))); Assert.True(TypeHelper.IsNumericType(typeof(float?))); Assert.True(TypeHelper.IsNumericType(typeof(ushort?))); Assert.True(TypeHelper.IsNumericType(typeof(uint?))); Assert.True(TypeHelper.IsNumericType(typeof(ulong?))); // Testing with GetType because of handling with non-numerics. See: // http://msdn.microsoft.com/en-us/library/ms366789.aspx // Using GetType - non-numeric Assert.False(TypeHelper.IsNumericType((new object()).GetType())); Assert.False(TypeHelper.IsNumericType(DBNull.Value.GetType())); Assert.False(TypeHelper.IsNumericType(true.GetType())); Assert.False(TypeHelper.IsNumericType('a'.GetType())); Assert.False(TypeHelper.IsNumericType((new DateTime(2009, 1, 1)).GetType())); Assert.False(TypeHelper.IsNumericType(string.Empty.GetType())); // Using GetType - numeric types // ReSharper disable RedundantCast Assert.True(TypeHelper.IsNumericType((new byte()).GetType())); Assert.True(TypeHelper.IsNumericType(43.2m.GetType())); Assert.True(TypeHelper.IsNumericType(43.2d.GetType())); Assert.True(TypeHelper.IsNumericType(((short)2).GetType())); Assert.True(TypeHelper.IsNumericType(((int)2).GetType())); Assert.True(TypeHelper.IsNumericType(((long)2).GetType())); Assert.True(TypeHelper.IsNumericType(((sbyte)2).GetType())); Assert.True(TypeHelper.IsNumericType(2f.GetType())); Assert.True(TypeHelper.IsNumericType(((ushort)2).GetType())); Assert.True(TypeHelper.IsNumericType(((uint)2).GetType())); Assert.True(TypeHelper.IsNumericType(((ulong)2).GetType())); // ReSharper restore RedundantCast // Using GetType - nullable non-numeric types bool? nullableBool = true; Assert.False(TypeHelper.IsNumericType(nullableBool.GetType())); char? nullableChar = ' '; Assert.False(TypeHelper.IsNumericType(nullableChar.GetType())); DateTime? nullableDateTime = new DateTime(2009, 1, 1); Assert.False(TypeHelper.IsNumericType(nullableDateTime.GetType())); // Using GetType - nullable numeric types byte? nullableByte = 12; Assert.True(TypeHelper.IsNumericType(nullableByte.GetType())); decimal? nullableDecimal = 12.2m; Assert.True(TypeHelper.IsNumericType(nullableDecimal.GetType())); double? nullableDouble = 12.32; Assert.True(TypeHelper.IsNumericType(nullableDouble.GetType())); short? nullableInt16 = 12; Assert.True(TypeHelper.IsNumericType(nullableInt16.GetType())); short? nullableInt32 = 12; Assert.True(TypeHelper.IsNumericType(nullableInt32.GetType())); short? nullableInt64 = 12; Assert.True(TypeHelper.IsNumericType(nullableInt64.GetType())); sbyte? nullableSByte = 12; Assert.True(TypeHelper.IsNumericType(nullableSByte.GetType())); float? nullableSingle = 3.2f; Assert.True(TypeHelper.IsNumericType(nullableSingle.GetType())); ushort? nullableUInt16 = 12; Assert.True(TypeHelper.IsNumericType(nullableUInt16.GetType())); ushort? nullableUInt32 = 12; Assert.True(TypeHelper.IsNumericType(nullableUInt32.GetType())); ushort? nullableUInt64 = 12; Assert.True(TypeHelper.IsNumericType(nullableUInt64.GetType())); }
You can find out if a variable is numeric using the Type.GetTypeCode()
method:
TypeCode typeCode = Type.GetTypeCode(desiredType); if (typeCode == TypeCode.Double || typeCode == TypeCode.Integer || ...) return true;
You'll need to complete all the available numeric types in the "..." part ;)
More details here: TypeCode Enumeration
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With