Skip to content

Instantly share code, notes, and snippets.

@cimnine
Created June 25, 2012 16:35
Show Gist options
  • Save cimnine/2989624 to your computer and use it in GitHub Desktop.
Save cimnine/2989624 to your computer and use it in GitHub Desktop.
A way to check if a type is numeric in C#
using System;
namespace ch.cimnine.Util
{
public sealed class Numeric
{
/// <summary>
/// Determines if a type is numeric. Nullable numeric types are considered numeric.
/// </summary>
/// <remarks>
/// Boolean is not considered numeric.
/// </remarks>
public static bool Is(Type type)
{
if (type == null) return false;
// from http://stackoverflow.com/a/5182747/172132
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 Is(Nullable.GetUnderlyingType(type));
}
return false;
}
return false;
}
/// <summary>
/// Determines if a type is numeric. Nullable numeric types are considered numeric.
/// </summary>
/// <remarks>
/// Boolean is not considered numeric.
/// </remarks>
public static bool Is<T>()
{
return Is(typeof(T));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment