1

我正在使用此代码将结果显示为偶数或奇数,而不是此处的真假:

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);
           }
4

7 回答 7

6

看看你得到的错误:

运算符“==”不能应用于“字符串”和“布尔”类型的操作数

那是因为缺少括号。它是连接字符串和布尔值,产生一个字符串值,你不能将它与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 之间的上述比较是无效的,因此您会收到错误消息。

于 2012-11-29T11:36:36.287 回答
4

你需要括号。" is " + (result ? "even" : "odd" );

三元运算符的优先级低于浓度(参见MSDN 上的优先级表)。

您的原始代码说 combine" is " + result然后比较true.

于 2012-11-29T11:30:36.217 回答
4

运算符 + 的优先级高于 ==。要修复它,只需在三元表达式周围加上括号:

Console.WriteLine(" is " + (result == true ? "even" : "odd"));
于 2012-11-29T11:30:51.053 回答
3

这是因为运算符优先级。你的表情

" is " + result == true ? "even" : "odd"

被解释为

(" is " + result) == true ? "even" : "odd"

因为+具有比 更高的优先级==。使用括号或单独的变量来避免这种行为。

" is " + (result == true ? "even" : "odd")

或者

var evenOrOdd = result == true ? "even" : "odd";
... " is " + evenOrOdd ...
于 2012-11-29T11:34:46.733 回答
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);
       }
于 2012-11-29T11:30:27.340 回答
2
Console.WriteLine(" is {0}", result ? "even" : "odd");
于 2012-11-29T11:34:31.897 回答
1

你错过了一个括号:

Console.WriteLine(" is " + (result == true ? "even" : "odd"));

编译器可能会抱怨" is " + result,并且您不能添加字符串和布尔值。通过添加括号,您可以对表达式属性进行分组,编译器很高兴。你也是。

于 2012-11-29T11:30:22.007 回答