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

built-in, built-in-types, c#, types

Solution

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.

Problem

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: ``` Object foo = 3; Type type_of_foo = foo.GetType(); if (type_of_foo == typeof(string)) { ... } else if (type_of_foo == typeof(int)) { ... } ... ``` Update I'm trying to recursively create a PropertyDescriptorCollection where the PropertyDescriptor types might not be builtin values. So I wanted to do something like this (note: this doesn't work yet, but I'm working on it): ``` public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { PropertyDescriptorCollection cols = base.GetProperties(attributes); List<PropertyDescriptor> list_of_properties_desc = CreatePDList(cols); return new PropertyDescriptorCollection(list_of_properties_desc.ToArray()); } private List<PropertyDescriptor> CreatePDList(PropertyDescriptorCollection dpCollection) { List<PropertyDescriptor> list_of_properties_desc = new List<PropertyDescriptor>(); foreach (PropertyDescriptor pd in dpCollection) { if (IsBulitin(pd.PropertyType)) { list_of_properties_desc.Add(pd); } else { list_of_properties_desc.AddRange(CreatePDList(pd.GetChildProperties())); } } return list_of_properties_desc; } // This was the orginal posted answer to my above question private bool IsBulitin(Type inType) { return inType.IsPrimitive || inType == typeof(string) || inType == typeof(object); } ```

Original source