someObject = SortedList.Values.Find(order => order.OrderID == orderID);
答案 0 :(得分:5)
您可能在LINQ中寻找.First(...)
或.Single(...)
(或其OrDefault
变体),但这只适用于实现IEnumerable<T>
的类型。 SortedList
不是强类型的,因此Lambda不起作用。看看LINQ的.Cast<T>()
。
答案 1 :(得分:5)
你可能想要:
SortedList.Values.Cast<Order>().FirstOrDefault(order => order.OrderID == orderID);
当然,如果您在谈论SortedList<TKey, TValue>
,则无需拨打Cast()
。
顺便说一句,如果你以这种方式探索Values
的{{1}},你很可能会使用错误的选择/使用错误的数据结构
修改强>
如果您不能在项目中使用LINQ,也不希望分别维护由订单的日期和订单ID键入的单独数据结构(如Ben Voigt所建议的那样),我认为别无选择,只能自己实施搜索:
SortedList
如果您想进一步概括,请编写自己的foreach(ShopOrder order in sortedList.Values)
{
if(order.OrderID == orderID) return order;
}
return null; // or throw an exception, whichever you find appropriate.
实施。
答案 2 :(得分:1)
您是否在列表排序的同一字段上搜索?二进制搜索速度最快,SortedList
提供IndexOfKey
函数来执行此操作。
看起来你正在搜索这些值,在这种情况下,GetValueList
的结果使用LINQ的FirstOrDefault
应该有效。