在转换为类型时对象为空

时间:2016-01-04 09:00:09

标签: c# generics types null

这是我的代码

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。可以做些什么?

2 个答案:

答案 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。