2013-12-21 50 views
0

在.NET扩展方法,我可以用得到List<PropertyInfo>以下的类型写<T>

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

请不要编辑您的问题来显示解决方案,而是标记帮助您接受的答案,而不是。 – Sklivvz

+0

@Sklivvz但问题是我不知道它的一个好的解决方案,所以我想它的问题的一部分 – FPGA

回答

3

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

所以,请写信至:

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

你可以改变你的方法采取System.Type类型的参数,并删除GetType()调用:

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

在这种情况下,你可以使用它作为如下:

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

你使它更丑陋;) – FPGA

1

的问题是,你为什么做出这种方法一般,如果对象实例的调用的GetType。 只需删除通用。

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

'这T obj'不编译... – Sklivvz

2

为什么你需要一个泛型类型参数的方法?你的方法是不是跟随?

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