将对象强制转换为类型时为null
本文关键字:类型 null 转换 对象 | 更新日期: 2023-09-27 18:28:48
这是我的代码
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
将在语句as T
之后立即变为null
。能做些什么?
如果您想要属性的值,可以尝试使用GetValue
方法并替换它:
var a = this.GetType().GetProperty(name) as T;
这个:
var a = property.GetValue(this) as T;
此外,还不太清楚这种方法的确切目的是什么,但这种情况看起来不稳定:
if (name == type.Name)
属性的名称应等于泛型类型参数的名称。这真的是这里需要的吗?
GetProperty方法将始终返回ProprtyInfo类型,因此除非T是PropertyInfo,否则a将始终为null。