1. ホーム
  2. c#

[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。

2022-02-17 08:53:17

質問

入力された数字が素数かどうかを調べるBasicプログラムを書いています。私は checkPrime(num) 素数を調べて返す関数 {コード numが素数である場合、otherは 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ループの中にあります。何が足りないのかよくわかりません。似たような質問で こちら という質問に対して、「条件演算子は式であって文ではないので、式の値に対して何らかの代入が必要である」と回答しています。同じような例が MSDNリファレンス ここでは、次のような説明があります。

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

しかし、私が理解できないのは、私の関数でやろうとしていることは、関数の戻り値をチェックし、その出力を表示することだけです。では、この式は私の場合、どこに来るのでしょうか?

解決方法は?

その 条件演算子 表現 ということは、単独では成立せず、何らかの形で結果を利用しなければなりません。あなたのコードでは、結果は使わず、次のような結果を出そうとしています。 副作用 の代わりに

の前の状態によります。 // ?: 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