dtb*_*dtb 82
LINQ在这里没有帮助,但您可以使用List<T>.ForEach:
列出<T> .ForEach方法
对List的每个元素执行指定的操作.
例:
myList.ForEach(p => myFunc(p));
Run Code Online (Sandbox Code Playgroud)
传递给lambda表达式的值是列表项,因此在此示例p中,longif myList是a List<long>.
Win*_*ith 22
正如其他海报所述,您可以使用List<T>.ForEach.
但是,您可以轻松编写一个扩展方法,允许您在任何上使用ForEach IEnumerable<T>
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach(T item in source)
action(item);
}
Run Code Online (Sandbox Code Playgroud)
这意味着你现在可以做到:
myList.Where( ... ).ForEach( ... );
Run Code Online (Sandbox Code Playgroud)
小智 18
邑!您可以使用,List.ForEach但问题是仅适用于列表(确保您可以动态更改所有内容,但更少的代码更有趣:)).此外,您必须使用Action<>不提供任何返回类型的预测.
无论如何,对于你想要的东西有一个答案,你可以用你想到的相同方式使它成为可能,Func<>但有一个小技巧如下:
我会在飞行中做所有事情:
string[] items = (new string[] { "d", "f" }).
Select(x => new Func<string>(() => {
//Do something here...
Console.WriteLine(x);
return x.ToUpper();
}
)).Select(t => t.Invoke()).ToArray<string>();
Run Code Online (Sandbox Code Playgroud)
这里有一些要点:
首先,我已经定义了一个字符串数组,可以被任何支持LINQ的集合替换.
其次,在调用给定数组的每个元素时,将声明Select其中的内部.Func<string>x
(查看空括号并记住,当你定义一个Func<type**1**, type**2**, ..., type**n**>总是最后一个类型是返回类型时,所以当你写Func<string>它时它表示一个没有输入参数的函数,它的返回类型是字符串)
很显然,我们希望给定的阵列上使用的功能(new string[] { "d", "f" }),这就是为什么我定义一个函数不带参数,也我已经使用了相同的变量x里面Func<>来指代相同的数组元素.
第三,如果你没有放第二个Select那么你有两个函数的集合返回字符串,并且他们已经从第一个数组获得了他们的输入.您可以执行此操作并将结果保存在anonymous变量中,然后调用其.Invoke方法.我在这里写:
var functions = (new string[] { "d", "f" }).
Select(x => new Func<string>(() => {
//Do something here...
Console.WriteLine(x);
return x.ToUpper();
}));
string[] items = functions.Select(t => t.Invoke()).ToArray<string>();
Run Code Online (Sandbox Code Playgroud)
最后,我将结果转换为数组!现在你有一个字符串数组!
对不起,好久不过!! 我希望它会有用.
否 - 如果要为列表中的每个项目调用函数,则必须为列表中的每个项目调用该函数.
但是,您可以使用该IList<T>.ForEach()方法作为一些语法糖,使代码的"业务端"更具可读性,如下所示:
items.ForEach(item => DoSomething(item));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82753 次 |
| 最近记录: |