【发布时间】:2011-12-30 04:49:14
【问题描述】:
当我在 List 上使用标准 Extension Method 时,例如 在哪里(...)
结果总是 IEnumerable,当 您决定进行列表操作,例如 Foreach()
我们需要 Cast(不漂亮)或使用 ToList() 扩展方法
(也许)使用了一个消耗更多内存的新列表(对吗?):
List<string> myList=new List<string>(){//some data};
(编辑:这个演员表不起作用)
myList.Where(p=>p.Length>5).Tolist().Foreach(...);
或
(myList.Where(p=>p.Length>5) as List<string>).Foreach(...);
哪种代码更好还是有第三种方式?
编辑: Foreach 是一个示例,将其替换为 BinarySerach
myList.Where(p=>p.Length>5).Tolist().Binarysearch(...)
【问题讨论】:
-
你想在
Foreach做什么? -
Foreach 是您假设 BinarySearch() 的列表示例方法
-
正如sixlettervariables 指出的那样,您应该看看您想用这个实现什么。我猜,你可以做 foreach 所做的事情,就在查询中,可能在 select 语句中。
-
在我看来,
ForEach方法是一个糟糕的设计决策,不应使用。它搞砸了可读性,使您的代码意图变得不那么明显。当您真正尝试在列表上进行竞标时,您实际上是在告诉列表进行竞标。它与 Linq 的效果如此糟糕的事实是为什么两者不应该混合使用的一个完美例子(在我看来,.ForEach根本不应该使用) -
这里的主要问题是你混合了两个概念; LINQ (
System.Enumerable) 方法和List<T>方法,并期望它们可以互换 - 但很简单:这两个想法之间存在根本差异。
标签: c# visual-studio linq extension-methods