为通用c#集合中的每个值调用一个函数

Str*_*ton 51 c# linq generics lambda

我在List集合中有一组整数值.我想为集合中的每个值调用一个函数,其中一个函数的参数是一个集合值.如果没有在foreach循环中执行此操作...有没有办法用lambda/linq表达式完成此操作?

像...这样的东西myList.Where(p => myFunc(p.Value));

提前谢谢,-s

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>.

  • 或者,如果myFunc匹配预期的ForEach委托的签名,则可以指定`myList.ForEach(myFunc)`. (7认同)

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)

最后,我将结果转换为数组!现在你有一个字符串数组!

对不起,好久不过!! 我希望它会有用.


Mat*_*ith 8

您可以使用List.ForEach方法,如下所示:

myList.ForEach(p => myFunc(p));
Run Code Online (Sandbox Code Playgroud)


Nei*_*ell 5

否 - 如果要为列表中的每个项目调用函数,则必须为列表中的每个项目调用该函数.

但是,您可以使用该IList<T>.ForEach()方法作为一些语法糖,使代码的"业务端"更具可读性,如下所示:

items.ForEach(item => DoSomething(item));
Run Code Online (Sandbox Code Playgroud)


tst*_*ter 4

您可以使用 ForEach 方法:

微软软件定义网络:

http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx