耶!您可以使用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>();
这里有几点:
首先,我已经动态定义了一个字符串数组,它可以被任何支持 LINQ 的集合替换。
第二,在Select 内部,将为给定数组的每个元素声明一个Func<string>,因为它称为x。。 p>
(看看空括号,记住当你定义一个Func<type**1**, type**2**, ..., type**n**>时,最后一个类型总是返回类型,所以当你只写Func<string>时,它表示一个没有输入参数的函数及其返回类型是字符串)
很明显,我们想在给定数组(new string[] { "d", "f" }) 上使用函数,这就是为什么我定义了一个没有参数的函数,而且我在Func<> 内部使用了相同的变量x 来引用相同的数组元素。
第三,如果您不放置 second 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>();
最后,我将结果转换为数组!现在你有了一个字符串数组!
对不起,它变长了!!希望对你有用。