1

ここでは、結果を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);
           }
4

7 に答える 7

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の比較は無効であるため、エラーが発生します。

于 2012-11-29T11:36:36.287 に答える
4

かっこが必要です。" is " + (result ? "even" : "odd" );

三項演算子の優先順位は、濃度よりも低くなります(MSDNの優先順位の表を参照してください)。

元のコードは、「結合" is " + resultしてから比較する」と言っていtrueます。

于 2012-11-29T11:30:36.217 に答える
4

演算子+は==よりも優先されます。これを修正するには、3項式を括弧で囲みます。

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

括弧がありません:

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

コンパイラはおそらくについて文句を言い" is " + result、文字列とブール値を追加することはできません。括弧を追加することにより、expressionsプロパティをグループ化すると、コンパイラーは満足します。あなたもね。

于 2012-11-29T11:30:22.007 に答える