在.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();
答案 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();