简化method<returnType, ListType>(this List<ListType>, ...)到method<returnType>(this List<anyType>, ...)了泛型列表
我正在寻找一种扩展方法,该方法允许我获取(任何类型的对象)列表中所有属性“ P”的值
到目前为止,我已经可以使用这种方法了:
public static T[] selectAll<T, U>(this List<U> list, string property)
{
List<T> r = new List<T>(); // prepare a list of values of the desired type to be returned
foreach(object o in list)
{
Type mt = o.GetType(); // what are we actually dealing with here? (List of what?) <-- This should be the same as Type U
IList<PropertyInfo> props = new List<PropertyInfo>(mt.GetProperties()); // Get all properties within that type
foreach(PropertyInfo p in props)
{
if (p.Name == property) // Are we looking for this property?
r.Add((T)p.GetValue(o, null)); // then add it to the list to be returned
}
}
return r.ToArray();
}
因为您不能简单地拥有未知的返回类型,所以我理解有必要在方法调用中指出返回类型,例如:
List<Control> SomeListOfControls = ...
string[] s = SomeListOfControls.selectAll<细绳, Control>("Text");
但是,由于该列表中项目的类型与该方法无关,因此我想从方程式中消除Type变量。我希望我可以简单地打电话
List<Control> SomeListOfControls = ...
string[] s = SomeListOfControls.selectAll<string>("Text"); <-您知道该列表由什么组成>>。
例如。
但我想不出一种方法来做到这一点。即使在编译之前,我也可以看到
public static T[] selectAll<T>(this List<> list, string property)
是Unexpected use of an unbound generic name(含义List<>)。
并且List<object>不能注册为各种扩展名List<?extends object>,可以这么说。
如果可能的话,我该如何做呢?
PS:似乎可能存在一种“本机”方式(通常是.net甚至C#),该方式是从可能具有T型属性P的集合中检索<T> P的集合-我无法弄清楚使用select和所有...但是如果有的话,我很乐意了解:)
胡说叔叔
ABOUTYOU
相关分类