Ну, один простой способ - просто явно перечислить их в наборе, например,
static readonly HashSet<Type> BuiltInTypes = new HashSet<Type>
(typeof(object), typeof(string), typeof(int) ... };
...
if (BuiltInTypes.Contains(typeOfFoo))
{
...
}
Я должен спросить, почему это важно - я могу понять, как это может иметь значение, если это .NET примитивный тип , но не могли бы вы объяснить, почему вы хотите, чтобы ваше приложение работало иначе, если оно один из тех, что для самого C #? Это для инструмента разработки?
В зависимости от ответа на этот вопрос, вы можете рассмотреть ситуацию с dynamic
в C # 4 - который не является типом во время выполнения как таковым, но является System.Object
+ атрибутом применительно к параметр метода и т. д.