我编写了一个LINQ语句,该语句将枚举名称列表与字典中存在的任何条目相匹配。然后我想调用一个函数并将匹配的字符串传递给它。我有这个并且它有效,但它有点味道,特别是必须从我的函数返回一个字符串。
var pas = Enum.GetNames(typeof(enums))
.Select(x => { return DoSomething(x); }).ToList();
DoSomething
看起来像:
private string DoSomething(string name)
{
// do stuff
return name;
}
可以重写,以便我可以使函数无效吗?
答案 0 :(得分:2)
Linq用于选择数据,因为void没有数据,所以你无法使用它。
但是有两种方法可用于在值列表中调用函数
从列表中
Enum.GetNames(typeof(enums)).ToList().ForEach(DoSomething)
来自Parallel
Parallel.ForEach(Enum.GetNames(typeof(enums)), DoSomething)
第二个将使用多个线程异步执行它们
答案 1 :(得分:1)
尝试List.ForEach代替:
Enum.GetNames(typeof(enums)).ToList().ForEach(x => DoSomething(x));
答案 2 :(得分:1)
前进有两种方式。如果你坚持将它放在Select
中,你可以这样做:
var pas = Enum.GetNames(typeof(enums))
.Select(x => {
DoSomething(x);
return x;
}).ToList();
但以下是一种更清洁的方法:
var pas = Enum.GetNames(typeof(enums)).ToList();
pas.ForEach(name => DoSomething(name));