C#条件运算符error只有赋值、调用、递增、递减、等待和新对象表达式才能用作语句



嗨,我正在写一个基本程序来确定输入数字是否为素数。我有一个checkPrime(num)函数,它检查素数,如果num是素数,则返回true,否则返回false。现在,在我的main()函数中,我使用了条件运算符来缩短代码,但我得到了一个我不确定的错误。以下是我的代码:

static void Main(String[] args) {
int n = Int32.Parse(Console.ReadLine());
while (n-- > 0) {
int num = Int32.Parse(Console.ReadLine());
(checkPrime(num) == true) ? Console.WriteLine("Prime") : Console.WriteLine("Not Prime");
}
}

当我编译时,我在条件语句行的while循环中得到错误Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement。我不知道我错过了什么。这里也有类似的问题,人们已经回答说,条件运算符行是一个表达式,而不是一个语句,所以必须对表达式的值进行某种排序或赋值。MSDN参考资料中给出了类似的例子,其中的解释类似于

// ?: conditional operator.
classify = (input > 0) ? "positive" : "negative";

但我不能理解的是,在我的函数中,我所要做的只是检查函数的返回值,然后打印输出。那么,在我的例子中,这个表达的东西从哪里来呢。

条件运算符是表达式,而不是语句,这意味着它不能单独存在,因为必须以某种方式使用结果。在代码中,您不使用结果,而是尝试产生副作用

根据?之前的条件,运算符返回第一个或第二个表达式的结果。但Console.WriteLine()的返回类型是void。因此运算符没有任何可返回的内容void不是?:运算符的有效返回类型。因此这里不能使用void-方法。

所以你可以这样做:

while (n-- > 0) {
int num = Int32.Parse(Console.ReadLine());
string result = checkPrime(num) ? "Prime" : "Not Prime";
Console.WriteLine(result);
}

或者您使用Console.WriteLine()呼叫内的操作员:

while (n-- > 0) {
int num = Int32.Parse(Console.ReadLine());
Console.WriteLine(checkPrime(num) ? "Prime" : "Not Prime");
}

在这两个示例中,运算符根据条件返回两个字符串中的一个。这就是这个操作员的职责。


注意不需要比较checkPrime()true的结果。结果已经是一个bool

最新更新