三元运营商未按预期工作

时间:2012-11-29 11:28:24

标签: c#

我正在使用此代码将结果显示为偶数或奇数而不是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);
           }

7 个答案:

答案 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属性进行分组,编译器很高兴。你也是。