为什么C#中的SortedList没有Find方法?

Axo*_*onn 2 .net c# linq sortedlist data-structures

如果你问我,傻.但是这条消息在这里是因为我会假设(可能是正确的)我是愚蠢的,而不是微软.那么......有什么我想念的吗?为什么他们没有为这个孩子提供"查找"方法?find可以在值上运行,它们是对象,所以我可以这样做:

someObject = SortedList.Values.Find(order => order.OrderID == orderID);
Run Code Online (Sandbox Code Playgroud)

Dan*_*ite 5

您可能正在寻找LINQ中的.First(...).Single(...)(或其OrDefault变体),但这只适用于实现的类型IEnumerable<T>.A SortedList不是强类型的,因此Lambda不起作用.看看LINQ吧.Cast<T>().


Ani*_*Ani 5

你可能想要:

SortedList.Values.Cast<Order>().FirstOrDefault(order => order.OrderID == orderID);
Run Code Online (Sandbox Code Playgroud)

职高的,如果你是在谈论SortedList<TKey, TValue>,调用Cast()是不必要的.

顺便说一句,如果你正在以这种方式Values探索SortedList,那么你很可能会使用错误的选择/使用错误的数据结构.

编辑:

如果您不能在项目中使用LINQ,也不希望分别维护由订单的date和orderID键入的单独数据结构(如Ben Voigt所建议的那样),我认为别无选择,只能自己实现搜索:

foreach(ShopOrder order in sortedList.Values)
{
  if(order.OrderID == orderID) return order;
}

return null; // or throw an exception, whichever you find appropriate.
Run Code Online (Sandbox Code Playgroud)

如果要进一步概括,请编写自己的FirstOrDefault实现.

  • 然后你可能需要两个集合:一个`SortedList <DateTime,ShopOrder>`和一个`Dictionary <int,ShopOrder>`,它可以让你根据ID轻松查找. (2认同)