在C#中的foreach中使用带有lambda表达式的三元运算符

我正在尝试学习如何在C#中正确使用lambda表达式,我遇到了这个问题。 我有一个像这样定义的布尔数组:

public bool[] worldState = new bool[25]; 

现在,在给它赋值之后,我想循环它并在bool为真时简单地打印“T”,在它为假时简单地打印“F”。 我知道如何用循环来做,但我想用一个单行做,所以我想出了这个:

 Array.ForEach(worldState, x => x? Console.WriteLine("T"): Console.WriteLine("F") ); 

但是,这不起作用。 为什么? 这样做的正确方法是什么?

尝试:

 Array.ForEach(worldState, x => Console.WriteLine(x ? "T" : "F") ); 

三元函数需要返回一个值,因此在这种情况下,应将T或F返回到WriteLine方法。

就个人而言,我认为foreachfor循环会更清洁,更有效。

 foreach(bool bVal in Array) { Console.WriteLine(bVal ? "T" : "F"); } 

要么

 for(i = 0; i < Array.Length; i ++) { Console.WriteLine(Array[i] ? "T" : "F"); } 

这是因为Console.WriteLine()不返回任何内容。 从三元运算符文档中,重点是我的:

条件运算符(?:)返回两个值之一

Console.WriteLine()不返回值。

只需使用if语句:

 Array.ForEach(worldState, x => { if(x) Console.WriteLine("T"); else Console.WriteLine("F"); } ); 

另一种可能性是使用三元运算符返回您想要的字符串:

 Array.ForEach(worldState, x => Console.WriteLine( x ? "T" : "F" ) ); 

ForEach if-else的正确语法是:

 Array.ForEach(worldState, x => { if(x) { Console.WriteLine("T"); } else { Console.WriteLine("F");}} ); 

三元运算符? : ? :需要将兼容值作为参数返回的表达式。 Console.WriteLine是一个void函数,不返回值。

虽然我会注意到标准的foreach循环更容易阅读和调试。 我不建议使用.ForEach()进行此类操作。 事实上,我不推荐它用于任何操作,因为它不会在标准循环上添加任何function。