我以前读过:
我正在写以下内容:
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;
}
}
}
有效,为什么?
感谢您的帮助。
答案 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
注意:
三元运算符返回包含在其第二部分或第三部分中的值或表达式。它不执行语句。