Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
.net 如何迭代字典的键,并使用Linq为字典中的每个键执行一个方法?_.net_Linq - Fatal编程技术网

.net 如何迭代字典的键,并使用Linq为字典中的每个键执行一个方法?

.net 如何迭代字典的键,并使用Linq为字典中的每个键执行一个方法?,.net,linq,.net,Linq,我如何修复这个LINQ扩展?在C或VB中,无论: States.Select(Function(item) myMethod(item.Key, item.Value)) States对象是一个字典,我试图使用LINQ重现的内容与此相同: For each item in states myMethod(item.Key, item.Value) Next item 我知道我遗漏了一些东西,因为以这种方式选择扩展不是解决方案。。。但是,我不知道。从您的示例来看,无法在linq中重现这

我如何修复这个LINQ扩展?在C或VB中,无论:

States.Select(Function(item) myMethod(item.Key, item.Value))
States对象是一个字典,我试图使用LINQ重现的内容与此相同:

For each item in states
    myMethod(item.Key, item.Value)
Next item

我知道我遗漏了一些东西,因为以这种方式选择扩展不是解决方案。。。但是,我不知道。

从您的示例来看,无法在linq中重现这一点。该函数不返回值。如果myMethod返回了一些东西,您可以创建一个包含所有结果的列表,如下C所示

var resultlist = States.Select(item => myMethod(item.Key,item.Value));

但是,如果该方法不返回值,则没有理由使用linq—只需像最初一样使用for each。

从您的示例中看,无法在linq中重现这一点。该函数不返回值。如果myMethod返回了一些东西,您可以创建一个包含所有结果的列表,如下C所示

var resultlist = States.Select(item => myMethod(item.Key,item.Value));

但是,如果该方法不返回值,则没有理由使用linq—只需像最初一样使用for each。

我想您的意思是,对于每个扩展,您可以这样使用它

States.ToList().ForEach(Function(item) myMethod(item.Key, item.Value))

我想你是指每个扩展,你可以这样使用它

States.ToList().ForEach(Function(item) myMethod(item.Key, item.Value))
Linq用于查询——它被设计为迭代集合并返回每个项的结果。有一些ForEach扩展方法只是包装ForEach,但在我看来它们毫无意义,因为它们只改变语法,而没有改进语法

您可以通过返回一个伪值在C中伪造它:

States.Select(item => {myMethod(item.Key, item.Value); return 0;})
或在VB中:

States.Select(Function(item) 
                myMethod(item.Key, item.Value) 
                Return 1 
              End Function)
但我认为这只是增加了令人困惑的噪音——foreach肯定更合适。

Linq用于查询——它被设计为迭代集合并返回每个项的结果。有一些ForEach扩展方法只是包装ForEach,但在我看来它们毫无意义,因为它们只改变语法,而没有改进语法

您可以通过返回一个伪值在C中伪造它:

States.Select(item => {myMethod(item.Key, item.Value); return 0;})
或在VB中:

States.Select(Function(item) 
                myMethod(item.Key, item.Value) 
                Return 1 
              End Function)

但我认为这只会增加令人困惑的噪音——foreach肯定更合适。

所以没有办法像FOR那样使用LINQ来处理secuence?那么LINQ总是希望返回一个值yes还是yes?是吗?谢谢你的回答@Linqs处理的枚举有点像序列,它们有顺序,可以按顺序处理。但是从编程的角度来看,除非您打算继续转换结果,否则您可以使用for-each。是的,您有理由认为for的性能最好,而不是执行不必要的转换+LINQ,但出于好奇,我问了如何复制它。再次感谢你,难道没有办法用LINQ来处理像FOR那样的事务吗?那么LINQ总是希望返回一个值yes还是yes?是吗?谢谢你的回答@Linqs处理的枚举有点像序列,它们有顺序,可以按顺序处理。但是从编程的角度来看,除非您打算继续转换结果,否则您可以使用for-each。是的,您有理由认为for的性能最好,而不是执行不必要的转换+LINQ,但出于好奇,我问了如何复制它。再次感谢您谢谢但代码是正确的?我的字典没有foreach方法谢谢但代码是正确的?我的字典没有foreach方法记住标题需要可搜索并描述您的问题,而不是您希望我们采取的行动。我编辑了你的标题来表达我的意思。如果这不是你的意思,请随意改进。我们的想法是,没有人会搜索、修复这个linq方法。@George Stocker是的,谢谢你的建议记住,标题需要是可搜索的,并描述你的问题,而不是你希望我们采取的行动。我编辑了你的标题来表达我的意思。如果这不是你的意思,请随意改进。我们的想法是,没有人会去寻找、修复这个linq方法。@George Stocker是的,谢谢你的建议