我试图获取具有List<T>
属性的自定义类的值,但是它会抛出异常(对象与目标类型不匹配。)。
我想首先检查值是Null
,如果没有则处理该值。
型号:
public class CustomModel
{
public List<Foo> FooList { get; set; }
public List<Bar> BarList { get; set; }
}
处理模型数据的代码:
public class Result<T>
{
private readonly T _model;
public Result(T model)
{
_model = model;
}
private CustomObject CreateSomething(T model)
{
var obj = new CustomObject();
var type = model.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
if (property.PropertyType.IsGenericType &&
typeof(List<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition()))
{
//this throws an error
var testList = property.GetValue(this, new object[] { });
//processed value will be passed to object
//some codes here after getting the property value
}
}
return obj;
}
}
如何获取值以便我可以处理它们?
答案 0 :(得分:1)
您应该使用List<>
将MakeGenericType()
设为通用类型。
类似的东西:
var listType = typeof(List<>).MakeGenericType(new[]{typeof(T)});
if (property.PropertyType.IsGenericType
&& listType.IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition()))
有关MakeGenericType的更多信息:https://msdn.microsoft.com/en-us/library/system.type.makegenerictype
var testList = property.GetValue(this, new object[] { });
您确定传递了正确的对象实例吗? this
在这里?
它应该是var testList = property.GetValue(FooList, new object[] { });
&lt; - FooList
答案 1 :(得分:1)
这是一个错字吗?从中读取属性而不是模型:
var testList = property.GetValue(model, new object[] { });
^^^^^