编译错误:只有assignment、call、increment、decrement、new

我正在写以下内容:


namespace Converter {

      public class Converter

      {

        public string dnaToRna(string dna)

        {

          string rna = "";

          foreach(char letter in dna){

            letter=='T' ? rna+='U' : rna+=letter;

            rna+=letter;

          }

          return rna;

        }

      }

    }

当我用测试调用代码时:


    namespace Converter {

  using NUnit.Framework;

  using System;


  [TestFixture]

  public class Test

  {

    [Test]

    public void test()

    {

      Converter converter = new Converter();

      Assert.AreEqual("UUUU", converter.dnaToRna("TTTT"));

    }

  }

}

它说:


src/Solution.cs(9,9): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement

但是,如果我将其替换为:


namespace Converter {

  public class Converter

  {

    public string dnaToRna(string dna)

    {

      string rna = "";

      foreach(char letter in dna){

        if(letter=='T'){

          rna+='U';

        }else{

          rna+=letter;

        }

      }

      return rna;

    }

  }

}

它有效,为什么?


感谢您的帮助😌😌😌。


犯罪嫌疑人X
浏览 293回答 3
3回答

慕容森

不正确:letter=='T' ? rna+='U' : rna+=letter;正确的:rna+= letter=='T' ? 'U' : letter;

呼啦一阵风

三元运算符应该返回一个值。它并不意味着可以替代 if 语句来执行代码。做任何其他事情都会产生副作用,那就是改变它本来要做的事情。不要在应该是两个可能的返回值之一期间改变事物,您应该确定您想要什么样的回报并使用它。rna += (letter=='T') ? 'U' : letter;

绝地无双

您不应该在三元条件本身内执行赋值;你应该改用它。rna += letter=='T' ? 'U' : letter;句法:Boolean Expression ? First Statement : Second Statement笔记:三元运算符返回包含在它的第二部分或第三部分中的值或表达式。它不执行语句。
打开App,查看更多内容
随时随地看视频慕课网APP