Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有返回值的情况下从Linq语句调用函数?_C#_Linq - Fatal编程技术网

C# 如何在没有返回值的情况下从Linq语句调用函数?

C# 如何在没有返回值的情况下从Linq语句调用函数?,c#,linq,C#,Linq,我编写了一个LINQ语句,它将枚举名列表与字典中的任何条目相匹配。然后我想调用一个函数并将匹配的字符串传递给它。我有这个,它可以工作,但有点异味,特别是必须从我的函数返回字符串 var pas = Enum.GetNames(typeof(enums)) .Select(x => { return DoSomething(x); }).ToList(); 而DoSomething看起来像: private

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

var pas = Enum.GetNames(typeof(enums))                          
               .Select(x => { return DoSomething(x); }).ToList();
而DoSomething看起来像:

private string DoSomething(string name)
{
    // do stuff
    return name;  
}
可以重写它以便使函数无效吗?

请尝试:

请尝试:


Linq用于选择数据,因为void没有数据,所以您不能使用它

但是有两种方法专门用于调用值列表中的函数

来自列表

Enum.GetNames(typeof(enums)).ToList().ForEach(DoSomething)
平行

Parallel.ForEach(Enum.GetNames(typeof(enums)), DoSomething)

第二个线程将使用多个线程异步执行它们

Linq用于选择数据,因为void没有数据,所以您不能使用它

但是有两种方法专门用于调用值列表中的函数

来自列表

Enum.GetNames(typeof(enums)).ToList().ForEach(DoSomething)
平行

Parallel.ForEach(Enum.GetNames(typeof(enums)), DoSomething)

第二个线程将使用多个线程异步执行它们。有两种方法。如果您坚持将其放在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));

前进的道路有两条。如果您坚持将其放在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));

不要使用linq no使用.Select.`Enum.GetNamestypeofenums.ToList.Foreach',但是如果您只想执行一个函数,您可以在列表或并行no上调用Foreach,迭代器的整个概念就是返回一个新的迭代器,其中包含树中的链接表达式。函数必须返回一个值,该值将转换为新迭代器的值。如果要使用void函数,例如终止流,请使用ForEachI Agree with@MikeT。Select实际上是用于转换数据的。不要使用linq no使用.Select.`Enum.GetNamestypeofenums.ToList.Foreach',但是如果您只想执行一个函数,您可以在列表或并行no上调用Foreach,迭代器的整个概念就是返回一个新的迭代器,其中包含树中的链接表达式。函数必须返回一个值,该值将转换为新迭代器的值。如果要使用void函数,例如终止流,请使用ForEachI Agree with@MikeT。Select实际上是用于转换数据的。谢谢-我有这个:Enum.GetNamestypeofProductAttributeList.ToList.ForEachSetAttributethanks-我有这个:Enum.GetNamestypeofProductAttributeList.ToList.ForEachSetAttribute