如何从Linq语句调用函数而没有返回值?

时间:2016-08-25 12:02:17

标签: c# linq

我编写了一个LINQ语句,该语句将枚举名称列表与字典中存在的任何条目相匹配。然后我想调用一个函数并将匹配的字符串传递给它。我有这个并且它有效,但它有点味道,特别是必须从我的函数返回一个字符串。

var pas = Enum.GetNames(typeof(enums))                          
               .Select(x => { return DoSomething(x); }).ToList();

DoSomething看起来像:

private string DoSomething(string name)
{
    // do stuff
    return name;  
}

可以重写,以便我可以使函数无效吗?

3 个答案:

答案 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));