プリミティブ型かどうかをテストする方法 質問する

プリミティブ型かどうかをテストする方法 質問する

型を HTML タグにシリアル化するコード ブロックがあります。

Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T
tagBuilder.Attributes.Add("class", t.Name);
foreach (PropertyInfo prop in t.GetProperties())
{
    object propValue = prop.GetValue(myObj, null);
    string stringValue = propValue != null ? propValue.ToString() : String.Empty;
    tagBuilder.Attributes.Add(prop.Name, stringValue);
}

これはうまく機能しますが、、などのプリミティブ型と、プリミティブではないが簡単にシリアル化できる などの他の型に対してのみこれを実行することを希望しますintdoubleリストboolstringその他のカスタム型など、他のすべてを無視します。

誰かこれをどうやってやるのか提案してくれませんか? それとも、どこかで許可したいタイプを指定して、プロパティのタイプをオンにして、それが許可されているかどうかを確認する必要がありますか? それは少し面倒なので、もっときちんとした方法があればいいと思います。

ベストアンサー1

プロパティ を使用できますが、やのType.IsPrimitiveように、プリミティブ型だと考えられる型でも実際にはプリミティブ型ではない型もあるため、注意してください。DecimalString

編集1: サンプルコードを追加しました

サンプルコードは次のとおりです。

if (t.IsPrimitive || t == typeof(Decimal) || t == typeof(String) || ... )
{
    // Is Primitive, or Decimal, or String
}

編集2:としてスラックコメント、プリミティブとして扱いたい他の型もあるかもしれません。このバリエーションを追加する必要があると思います一つずつ

編集3:IsPrimitive = (Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double、および Single)、チェックする別のプリミティブ型 (t == typeof(DateTime))

おすすめ記事