将对象强制转换为类型时为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。能做些什么?

将对象强制转换为类型时为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。