Is there a function to check if an object is a builtin data type?

前端 未结 3 1989
日久生厌
日久生厌 2020-12-10 18:58

I would like to see if an object is a builtin data type in C#

I don\'t want to check against all of them if possible.
That is, I don\'t want to do this:

相关标签:
3条回答
  • 2020-12-10 19:28

    I think this is one of the best possibilies:

    private static bool IsBulitinType(Type type)
    {
        return (type == typeof(object) || Type.GetTypeCode(type) != TypeCode.Object);
    }
    
    0 讨论(0)
  • 2020-12-10 19:36

    Well, one easy way is to just explicitly list them in a set, e.g.

    static readonly HashSet<Type> BuiltInTypes = new HashSet<Type>
        (typeof(object), typeof(string), typeof(int) ... };
    
    ...
    
    
    if (BuiltInTypes.Contains(typeOfFoo))
    {
        ...
    }
    

    I have to ask why it's important though - I can understand how it might make a difference if it's a .NET primitive type, but could you explain why you would want your application to behave differently if it's one of the ones for C# itself? Is this for a development tool?

    Depending on the answer to that question, you might want to consider the situation with dynamic in C# 4 - which isn't a type at execution time as such, but is System.Object + an attribute when applied to a method parameter etc.

    0 讨论(0)
  • 2020-12-10 19:49

    Not directly but you can do the following simplified check

    public bool IsBulitin(object o) {
      var type = o.GetType();
      return (type.IsPrimitive && type != typeof(IntPtr) && type != typeof(UIntPtr))
            || type == typeof(string) 
            || type == typeof(object) 
            || type == typeof(Decimal);
    }
    

    The IsPrimitive check will catch everything but string, object and decimal.

    EDIT

    While this method works, I would prefer Jon's solution. The reason is simple, check the number of edits I had to make to my solution because of the types I forgot were or were not primitives. Easier to just list them all out explicitly in a set.

    0 讨论(0)
提交回复
热议问题