Ste*_*ger 182 .net c# linq foreach
是否有"For each"操作的Linq样式语法?
例如,将基于一个集合的值添加到另一个集合,已存在的集合:
IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };
IList<int> list = new List<int>();
someValues.ForEach(x => list.Add(x + 1));
Run Code Online (Sandbox Code Playgroud)
代替
foreach(int value in someValues)
{
list.Add(value + 1);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ann 264
使用ToList()扩展方法是您的最佳选择:
someValues.ToList().ForEach(x => list.Add(x + 1));
Run Code Online (Sandbox Code Playgroud)
BCL中没有直接实现ForEach的扩展方法.
虽然有一个在没有扩展方法BCL做这个,也就是还处于一个选项System命名空间......如果你添加无扩展到您的项目:
using System.Reactive.Linq;
someValues.ToObservable().Subscribe(x => list.Add(x + 1));
Run Code Online (Sandbox Code Playgroud)
这与上面的使用具有相同的最终结果ToList,但是(理论上)更有效,因为它将值直接流式传输给委托.
Nol*_*rin 95
在Array和List<T>班已经有ForEach方法,但只有该种具体实施.(注意前者是static顺便说一下).
不确定它是否真的比foreach声明提供了很大的优势,但你可以编写一个扩展方法来为所有IEnumerable<T>对象完成工作.
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
Run Code Online (Sandbox Code Playgroud)
这将允许您在问题中发布的确切代码按您的意愿工作.
Luk*_*keH 31
内置没有任何内容,但您可以轻松创建自己的扩展方法来执行此操作:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
Run Code Online (Sandbox Code Playgroud)
stu*_*ith 18
官方MS系列是"因为它不是功能操作"(即它是一个有状态的操作).
你做不到这样的事情:
list.Select( x => x+1 )
Run Code Online (Sandbox Code Playgroud)
或者如果你真的需要它在列表中:
var someValues = new List<int>( list.Select( x => x+1 ) );
Run Code Online (Sandbox Code Playgroud)
没有 Linq ForEach 扩展。但是,List如果您愿意List直接使用的话,该类有一个 ForEach 方法。
无论如何,标准foreach语法将为您提供您想要的结果,并且可能更容易阅读:
foreach (var x in someValues)
{
list.Add(x + 1);
}
Run Code Online (Sandbox Code Playgroud)
如果您坚决想要 Linq 风格的扩展。自己实现这个很简单。
public static void ForEach<T>(this IEnumerable<T> @this, Action<T> action)
{
foreach (var x in @this)
action(x);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358394 次 |
| 最近记录: |