这是我的代码
public virtual T GetRepository<T>()
where T : class
{
var type = typeof ( T );
var properties = this.GetType().GetProperties();
foreach ( var property in properties )
{
var name = property.Name;
if ( name == type.Name )
{
var a = this.GetType().GetProperty(name) as T;
return a;
}
}
return null;
}
目标是返回泛型类型T.首先,我获取类的属性,然后循环遍历属性,希望找到与类型T同名的属性名称。
这种情况在我的情况下没问题,因为属性都是Interface<FooRepository> FooRepository { get; set; }
形式,所以我只需要比较两者。
此方法位于类中。问题是a
会在语句null
之后立即更改为as T
。可以做些什么?
答案 0 :(得分:2)
如果您想要该属性的值,可以尝试使用GetValue
方法并替换它:
var a = this.GetType().GetProperty(name) as T;
用这个:
var a = property.GetValue(this) as T;
同样不太清楚这种方法究竟是什么目的,但这种情况看起来不稳定:
if (name == type.Name)
属性的名称应该等于泛型类型参数的名称。这真的需要吗?
答案 1 :(得分:0)
GetProperty方法将始终返回ProprtyInfo类型,因此除非T是PropertyInfo,否则a将始终为null。