1

我想提取通用列表中第一个属性的值。第一个属性始终是 Int32(不可为空)

列表示例

IEnumerable<T> items

每行中第一个属性的值应该创建一个LinkedList<int>

任何想法如何解决这个问题?

4

2 回答 2

1

尝试选择泛型元素方法的重新调整类型

public static U GetElement<U>(List<U> sourcetype)
{  
 return (from source in sourcetype where source.GetType().GetProperties().Where(p => p.GetGetMethod().ReturnType == typeof(LinkedList<int>)).FirstOrDefault() != null select source).FirstOrDefault();
}

返回可以为空...

此致。

于 2013-06-20T10:58:05.253 回答
1

由于泛型类型的“第一个属性”对于将您转换为的方法的调用者来说是已知的itemsLinkedList因此调用者可以传递一个 lambda,根据需要选择第一个(第二个、第三个)项目,如下所示:

public static LinkedList<V> ToLinkedList<T,V>(
    this IEnumerable<T> items, Func<T,V> selector
) {
    return new LinkedList<V>(items.Select(selector));
}

你可以像这样调用这个方法:

LinkedList<int> res = items.ToLinkedList(item => item.FirstField);

这种方法可以让您避免通过引入不必要的接口来修改您的类,并且还允许使用第三方类。

于 2013-06-20T09:59:47.077 回答