使用反射从List <custommodel>获取特定类型

时间:2018-03-15 17:43:10

标签: c# reflection

我有这部分方法:

var t = typeof(T);
var fieldValues = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
var typesToCast = new List<string>();
var fieldsToCast = new List<string>();

foreach (var field in fieldValues)
{
    var attr = (MetaAttribute[])field.GetCustomAttributes(typeof(MetaAttribute), false);
    if (attr.Length > 0)
    {
        fieldsToCast.Add(field.Name.ToString());
        typesToCast.Add(field.PropertyType.Name);
    }
}

但是,如果我有一个属性:

public MyModel something {get;set;}

的结果
field.PropertyType.Name

MyModel

但是,我有public List<MyModel> something {get;set;} 如何使用MyModel的反射来获取List类型?

1 个答案:

答案 0 :(得分:1)

您正在寻找的是类型的第一个类型参数。你可以用它来获得它:

if (field.PropertyType.IsGenericType)
{
    var typeArguments = field.PropertyType.GetGenericArguments();
    typesToCast.Add(typeArguments[0].Name);
}
else
{
    typesToCast.Add(field.PropertyType.Name);
}