1. bool IsNumeric(TypeCode tc)
    2. {
    3. switch (tc)
    4. {
    5. case TypeCode.SByte:
    6. case TypeCode.Byte:
    7. case TypeCode.Int16:
    8. case TypeCode.UInt16:
    9. case TypeCode.Int32:
    10. case TypeCode.UInt32:
    11. case TypeCode.Int64:
    12. case TypeCode.UInt64:
    13. case TypeCode.Single:
    14. case TypeCode.Double:
    15. case TypeCode.Decimal:
    16. return true;
    17. default:
    18. return false;
    19. }
    20. }
    21. bool IsNumeric(Type type)
    22. {
    23. TypeCode typeCode = default;
    24. if (IsNullAble(type))
    25. {
    26. var underlyingType = Nullable.GetUnderlyingType(type);
    27. typeCode = Type.GetTypeCode(underlyingType);
    28. return IsNumeric(typeCode);
    29. }
    30. typeCode = Type.GetTypeCode(type);
    31. return IsNumeric(typeCode);
    32. }
    33. bool IsNullAble(Type type)
    34. {
    35. return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
    36. }
    37. public static string GetTypeAlias(Type type)
    38. {
    39. using (var provider = new CSharpCodeProvider())
    40. {
    41. var typeRef = new CodeTypeReference(type);
    42. var typeAlias = provider.GetTypeOutput(typeRef);
    43. if (typeAlias.Contains("System.Nullable<"))
    44. {
    45. return typeAlias.Replace(">", "?");
    46. }
    47. return typeAlias;
    48. }
    49. }