如何测试类型是否是原语?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个代码块,它将类型序列化为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);
}

这很好,但我希望它只对原始类型这样做,例如intdoublebool等,以及其他类型,这些类型不是原始的,但可以很容易地序列化,例如string。我希望它忽略所有其他的东西,比如列表和其他自定义类型。

提问于
用户回答回答于

您可以使用该属性Type.IsPrimitive,但是要小心,因为有些类型我们可以认为是原语,但它们不是,例如DecimalString...

添加样例代码

下面是一个示例代码:

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

用户回答回答于

System.TypeCodeSystem.Convert...

可以很容易地序列化映射到System.TypeCodeSystem.TypeCode.Object所以你可以:

object PropertyValue = ...
if(Convert.GetTypeCode(PropertyValue) != TypeCode.Object)
{
    string StringValue = Convert.ToString(PropertyValue);
    ...
}

扫码关注云+社区