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:
I think this is one of the best possibilies:
private static bool IsBulitinType(Type type)
{
return (type == typeof(object) || Type.GetTypeCode(type) != TypeCode.Object);
}
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.
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.