失礼しました。回答が間違っていたので、打ち消し線で訂正します。
CS8604: 'int int.Parse(string s)' 内のパラメーター 's' に Null 参照引数がある可能性があります。
Console.ReadLine
はnullを返す可能性があるので、コンパイラが警告を出しています。これはC#8.0でNullReferenceException
発生を回避するために追加された機能です。
Console.ReadLine メソッド (System) | Microsoft Docs
入力ストリームの次の行。または次の行がない場合は null。
Console.ReadLineの戻り値をnull 許容参照型の変数に格納すれば、nullの許容をコンパイラに明示でき、警告は出力されなくなります。
Console.ReadLine呼び出しでの警告を抑制してもint.Parse(s)
で警告が出力される (int.Parseはnullを許容しない) ので、この方法では解決できません。
c#
1string? s = Console.ReadLine();
2int num = int.Parse(s);
null 許容参照型 | Microsoft Docs
null 許容参照型は、null 許容値型と同じ構文を使用して記述し、変数の型の後に ? を追加します。 たとえば、次の変数宣言は、null 許容型の文字列変数 name を表します。
string? name;
またはvar
で宣言し、暗黙的に型指定された変数にしてもよいです。
こちらも同様に解決できません。
c#
1var s = Console.ReadLine();
2int num = int.Parse(s);
ただし、暗黙的に型指定されたローカル変数 (var を使用して宣言) は、null 許容参照型です。 前のセクションで示した通り、スタティック分析によってローカル変数の "null 状態" が決定され、それが "null の可能性あり" かどうかが決定されます。
ご質問とは関係ありませんが、入力を数値に変換できるとは限らない('a'などが入力されるかもしれない)ので、ParseではなくTryParseを使ってください。
Int32.TryParse メソッド (System) | Microsoft Docs
TryParseで解決できます。Zuishinさんのコメントをご覧ください。