写入<t> </t>的类型的扩展方法

时间:2013-12-21 10:26:37

标签: c# generics reflection

在.NET中,我可以使用以下

获得List<PropertyInfo>
obj.GetType().GetProperties().ToList();

为了让我做得更好

public static IList<PropertyInfo> GetPropertyInfo<T>(this T obj)
{
    return obj.GetType().GetProperties().ToList();
}

但有些事情出现了,这是

obj.GetPropertyInfo<Wrapper>();

但我想知道如何避免<T>他们避开它的方式?

为什么不能只是

obj.GetPropertyInfo();

4 个答案:

答案 0 :(得分:3)

没有理由不放弃扩展方法中的T泛型参数,因为您没有在任何地方使用该泛型参数!

所以,请写下:

public static IList<PropertyInfo> GetPropertyInfo(this object obj)
{
    return obj.GetType().GetProperties().ToList();
}

答案 1 :(得分:2)

为什么需要一个带泛型类型参数的方法?你的方法不能像下面那样吗?

public static IList<PropertyInfo> GetPropertyInfo(this object obj)
{
    return obj.GetType().GetProperties().ToList();
}

答案 2 :(得分:1)

问题是如果调用对象实例的GetType,为什么你使这个方法通用。 只需删除通用。

public static IList<PropertyInfo> GetPropertyInfo(this T obj)
{
    return obj.GetType().GetProperties().ToList();
}

答案 3 :(得分:0)

您可以更改方法以获取System.Type类型的参数并删除GetType()调用:

public static IList<PropertyInfo> GetPropertyInfo(this Type obj)
{
    return obj.GetProperties().ToList();
}

在这种情况下,您可以按如下方式使用它:

var propertyInfos = typeof(MyType).GetPropertyInfo();