我想调用FindLast
一个实现的集合IEnumerable
,但FindLast
仅适用于List
. 什么是最好的解决方案?
JoelFan
问问题
7019 次
5 回答
9
相当于:
var last = list.FindLast(predicate);
是
var last = sequence.Where(predicate).LastOrDefault();
(后者必须检查序列中的所有项目,但是......)
实际上,“Where()”是 Find 部分,“Last()”分别是“FindLast”的 Last 部分。类似地,FindFirst(predicate)
将映射到sequence.Where(predicate).FirstOrDefault()
并且FindAll(predicate)
将是sequence.Where(predicate)
。
于 2009-01-12T15:41:34.040 回答
4
使用 LINQ-to-Objects 怎么样:
var item = data.LastOrDefault(x=>x.Whatever == "abc"); // etc
如果您只有 C# 2,则可以改用实用方法:
using System;
using System.Collections.Generic;
static class Program {
static void Main() {
int[] data = { 1, 2, 3, 4, 5, 6 };
int lastOdd = SequenceUtil.Last<int>(
data, delegate(int i) { return (i % 2) == 1; });
}
}
static class SequenceUtil {
public static T Last<T>(IEnumerable<T> data, Predicate<T> predicate) {
T last = default(T);
foreach (T item in data) {
if (predicate(item)) last = item;
}
return last;
}
}
于 2009-01-12T15:46:37.990 回答
1
您可以通过将集合传递给 List<> 构造函数来将集合添加到新列表中。
List<MyClass> myList = new List<MyClass>(MyCol);
myList.FindLast....
于 2009-01-12T15:30:07.383 回答
0
使用位于命名空间 System.Linq 中的扩展方法 Last()。
于 2009-01-12T15:29:08.900 回答
0
您的问题无效,因为集合没有最后一个元素。具有完整排序的更专业的集合是列表。没有排序的更专业的集合是字典。
于 2009-01-12T17:48:23.580 回答