[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
質問
入力された数字が素数かどうかを調べる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
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
[解決済み】「namespace」なのに「type」のように使われる。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015