我正在使用此代码将结果显示为偶数或奇数而不是true和false:
Console.WriteLine(" is " + result == true ? "even" : "odd");
因此我使用三元运算符,但它抛出错误,一些语法问题在这里,但我无法捕捉它。 在此先感谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationForTesting
{
delegate int Increment(int val);
delegate bool IsEven(int v);
class lambdaExpressions
{
static void Main(string[] args)
{
Increment Incr = count => count + 1;
IsEven isEven = n => n % 2 == 0;
Console.WriteLine("Use incr lambda expression:");
int x = -10;
while (x <= 0)
{
Console.Write(x + " ");
bool result = isEven(x);
Console.WriteLine(" is " + result == true ? "even" : "odd");
x = Incr(x);
}
答案 0 :(得分:6)
看看你得到的错误:
运算符'=='不能应用于'string'类型的操作数 '布尔'
那是因为缺少括号。它连接字符串和bool值,这会产生字符串值,您无法将其与bool
进行比较。
要修复它:
Console.WriteLine(" is " + (result == true ? "even" : "odd"));
进一步澄清。
bool result = true;
string strTemp = " is " + result;
上述语句是一个有效的语句,并产生一个字符串is True
,因此您的语句目前如下所示:
Console.WriteLine(" is True" == true ? "even" : "odd");
字符串和bool之间的上述比较无效,因此您会收到错误。
答案 1 :(得分:4)
你需要括号。 " is " + (result ? "even" : "odd" );
三元运算符的优先级低于概念(参见precendence table at MSDN)。
您的原始代码表示合并" is " + result
,然后与true
进行比较。
答案 2 :(得分:4)
运营商+的优先级高于==。要修复它,只需将括号括在三元表达式周围:
Console.WriteLine(" is " + (result == true ? "even" : "odd"));
答案 3 :(得分:3)
试一试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationForTesting
{
delegate int Increment(int val);
delegate bool IsEven(int v);
class lambdaExpressions
{
static void Main(string[] args)
{
Increment Incr = count => count + 1;
IsEven isEven = n => n % 2 == 0;
Console.WriteLine("Use incr lambda expression:");
int x = -10;
while (x <= 0)
{
Console.Write(x + " ");
bool result = isEven(x);
Console.WriteLine(" is " + (result == true ? "even" : "odd"));
x = Incr(x);
}
答案 4 :(得分:3)
这是因为 operator precedence 。你的表达
" is " + result == true ? "even" : "odd"
被解释为
(" is " + result) == true ? "even" : "odd"
因为+
的优先级高于==
。使用括号或单独的变量来避免这种行为。
" is " + (result == true ? "even" : "odd")
或
var evenOrOdd = result == true ? "even" : "odd";
... " is " + evenOrOdd ...
答案 5 :(得分:2)
Console.WriteLine(" is {0}", result ? "even" : "odd");
答案 6 :(得分:1)
你错过了一个括号:
Console.WriteLine(" is " + (result == true ? "even" : "odd"));
编译器可能会抱怨" is " + result
,你不能添加字符串和bool。通过添加括号,您可以对expressions属性进行分组,编译器很高兴。你也是。