使用反射获取属性类型

4

我在反射中获取属性类型时遇到了一点问题。

我的类只包含简单类型,比如字符串、整数、小数等。

public class simple 
{
  public string article { get; set; }
  public decimal price { get; set; }
}

现在我需要通过反射获取这些属性,并根据它们的类型进行处理。
我需要像这样的东西:
Type t = obj.GetType();
PropertyInfo propInfo = t.GetProperty("article");
Type propType = ??  *GetPropType*() ??

switch (Type.GetTypeCode(propType))
{
  case TypeCode.Decimal:
    doSome1;
    break;
  case TypeCode.String:
    doSome2;
    break;
}

对于字符串,可以使用propInfo.PropertyType.UnderlyingSystemType作为GetPropType(),但对于十进制数等则不行。

对于十进制数,可以使用propInfo.PropertyType.GenericTypeArguments.FirstOrDefault();,但对于字符串则不行。

如何获取所有简单类型的类型?


嗯,propInfo.PropertyType就足够了。点此查看示例 - ProgrammingLlama
1个回答

5
你可以使用PropertyType来判断哪个是string或者decimal类型。像这样尝试一下;
Type t = obj.GetType();
PropertyInfo propInfo = t.GetProperty("article");
if (propInfo.PropertyType == typeof(string))
{
    Console.WriteLine("String Type");
}
if (propInfo.PropertyType == typeof(decimal) 
    || propInfo.PropertyType == typeof(decimal?))
{
    Console.WriteLine("Decimal Type");
}

1
我不知道为什么,但是我的十进制属性的propInfo.PropertyType内容是这样的:propType = {Name = "Nullable1" FullName = "System.Nullable1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"}这不像typeof(decimal)?为什么? - Nunzio
1
@Nunzio,你的问题代码是错误的。你的代码必须有 decimal? price,其中 ? 实际上只是 Nullable<decimal> price 的语法糖。 - ProgrammingLlama
我猜你把属性定义成了“decimal?”而不是“decimal”。我已经更新了答案。 - lucky
哦,好的,现在我明白了。非常感谢你。 - Nunzio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接