编译错误:只能将赋值,调用,递增,递减和新对象表达式用作语句

时间:2019-04-09 06:44:02

标签: c#

我以前读过:

C# Only assignment, call, increment, decrement, and new object expressions can be used as a statement

Only assignment, call, increment, decrement, and new object expressions can be used as a statement and ; Expected

我正在写以下内容:

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

有效,为什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

不正确:

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

正确:

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

答案 1 :(得分:2)

ternary operator应该返回一个值。这并不意味着可以替换if语句来执行代码。做其他任何事情都将是side-effect,那就是要改变本来应该做的事情。
您应该确定想要的返回类型并使用它,而不是在应该被认为是两个可能的返回值之一的过程中进行更改。

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

答案 2 :(得分:1)

您不应该在三元条件本身内部执行分配;您应该改用它。

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

语法:

Boolean Expression ? First Statement : Second Statement

注意:

三元运算符返回包含在其第二部分或第三部分中的值或表达式。它不执行语句。