switch条件の長いリストや大きなステートメントを使用して、誰もが非常に複雑なことをしているようです。
プリミティブ型と見なされるものには、複数の可能な解釈があります。
1. .NET プリミティブ型
.NET には、プリミティブ型と見なされる型のリストがあります。Typeクラスには、これらのプリミティブ型およびその他の型に対して返されるプロパティプロパティがありますIsPrimitive。truefalse
プリミティブ型は、Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double、および Single です。
IntPtrとUIntPtrもそこにあることに注意してください。これらは、プラットフォーム固有の整数型を表します (たとえば、32 ビット コンピュータでは 32 ビット整数、64 ビット コンピュータでは 64 ビット)。また、.NET はプリミティブとは見なされStringないことにも注意してください。Decimal
次のようにテストできます。
public static bool IsPrimitiveType(Type type)
{
return type.IsPrimitive;
}
2. .NET プリミティブ型と String および Decimal
あなたの質問では、プリミティブ型の定義にStringand型を含めました。Decimal次のように、それらについてもテストしましょう。
public static bool IsPrimitiveType(Type type)
{
return type.IsPrimitive
|| type == typeof(decimal)
|| type == typeof(string);
}
Stringorを拡張することは不可能なので、Decimalここでは単純な型の等価性で十分です。
3. 組み込みの C# 型
プリミティブ型の定義が MSDN の組み込み型テーブル (C# リファレンス)IntPtrのリストである場合、 andUIntPtrはそのリストにないため、除外する必要があります。
public static bool IsPrimitiveType(Type type)
{
return (type.IsPrimitive
&& type != typeof(UIntPtr)
&& type != typeof(IntPtr))
|| type == typeof(decimal)
|| type == typeof(string);
}
4. まったく別のもの
前の例に基づいて、必要に応じてプリミティブ型の定義に追加の型を除外または含める方法を確認できます。
IsPrimitiveType上記のすべての例で、次のようにメソッドを呼び出すことができます。
オブジェクト インスタンスがある場合obj:
bool isPrimitive = IsPrimitiveType(obj.GetType());
タイプがある場合someType:
bool isPrimitive = IsPrimitiveType(someType);
ジェネリック型パラメーターがある場合T:
bool isPrimitive = IsPrimitiveType(typeof(T));
コンパイル時に既知の型がある場合、たとえばInt32:
bool isPrimitive = IsPrimitiveType(typeof(Int32));