回答編集履歴

5

軽微な修正

2022/09/03 23:42

投稿

jhashimoto
jhashimoto

スコア838

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ~~Console.ReadLineの戻り値をnull 許容参照型の変数に格納すれば、nullの許容をコンパイラに明示でき、警告は出力されなくなります。~~
12
12
 
13
- Console.ReadLine呼び出しでの警告を抑制しても`int.Parse(s)`で警告が出力される (int.ParseはNullを許容しない) ので、この方法では解決できません。
13
+ Console.ReadLine呼び出しでの警告を抑制しても`int.Parse(s)`で警告が出力される (int.Parseはnullを許容しない) ので、この方法では解決できません。
14
14
 
15
15
  ```c#
16
16
  string? s = Console.ReadLine();

4

補足

2022/09/03 23:41

投稿

jhashimoto
jhashimoto

スコア838

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ~~Console.ReadLineの戻り値をnull 許容参照型の変数に格納すれば、nullの許容をコンパイラに明示でき、警告は出力されなくなります。~~
12
12
 
13
- Console.ReadLine呼び出しでの警告を抑制しても`int.Parse(s)`で警告が出力されるので、この方法では解決できません。
13
+ Console.ReadLine呼び出しでの警告を抑制しても`int.Parse(s)`で警告が出力される (int.ParseはNullを許容しない) ので、この方法では解決できません。
14
14
 
15
15
  ```c#
16
16
  string? s = Console.ReadLine();

3

回答が間違っていたので訂正

2022/09/03 23:10

投稿

jhashimoto
jhashimoto

スコア838

test CHANGED
@@ -1,3 +1,5 @@
1
+ 失礼しました。回答が間違っていたので、打ち消し線で訂正します。
2
+
1
3
  > CS8604: 'int int.Parse(string s)' 内のパラメーター 's' に Null 参照引数がある可能性があります。
2
4
 
3
5
  `Console.ReadLine`はnullを返す可能性があるので、コンパイラが警告を出しています。これはC#8.0で`NullReferenceException`発生を回避するために追加された機能です。
@@ -6,7 +8,9 @@
6
8
 
7
9
  > 入力ストリームの次の行。または次の行がない場合は null。
8
10
 
9
- Console.ReadLineの戻り値をnull 許容参照型の変数に格納すれば、nullの許容をコンパイラに明示でき、警告は出力されなくなります。
11
+ ~~Console.ReadLineの戻り値をnull 許容参照型の変数に格納すれば、nullの許容をコンパイラに明示でき、警告は出力されなくなります。~~
12
+
13
+ Console.ReadLine呼び出しでの警告を抑制しても`int.Parse(s)`で警告が出力されるので、この方法では解決できません。
10
14
 
11
15
  ```c#
12
16
  string? s = Console.ReadLine();
@@ -17,7 +21,9 @@
17
21
  >
18
22
  > string? name;
19
23
 
20
- または`var`で宣言し、暗黙的に型指定された変数にしてもよいです。
24
+ ~~または`var`で宣言し、暗黙的に型指定された変数にしてもよいです。~~
25
+
26
+ こちらも同様に解決できません。
21
27
 
22
28
  ```c#
23
29
  var s = Console.ReadLine();
@@ -26,6 +32,9 @@
26
32
 
27
33
  > ただし、暗黙的に型指定されたローカル変数 (var を使用して宣言) は、null 許容参照型です。 前のセクションで示した通り、スタティック分析によってローカル変数の "null 状態" が決定され、それが "null の可能性あり" かどうかが決定されます。
28
34
 
29
- ご質問とは関係ありませんが、入力を数値に変換できるとは限らない('a'などが入力されるかもしれない)ので、ParseではなくTryParseを使ってください。
35
+ ~~ご質問とは関係ありませんが、入力を数値に変換できるとは限らない('a'などが入力されるかもしれない)ので、ParseではなくTryParseを使ってください。~~
30
36
 
31
37
  [Int32.TryParse メソッド (System) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.tryparse?view=net-6.0)
38
+
39
+ TryParseで解決できます。Zuishinさんのコメントをご覧ください。
40
+

2

別解

2022/09/03 21:47

投稿

jhashimoto
jhashimoto

スコア838

test CHANGED
@@ -17,6 +17,15 @@
17
17
  >
18
18
  > string? name;
19
19
 
20
+ または`var`で宣言し、暗黙的に型指定された変数にしてもよいです。
21
+
22
+ ```c#
23
+ var s = Console.ReadLine();
24
+ int num = int.Parse(s);
25
+ ```
26
+
27
+ > ただし、暗黙的に型指定されたローカル変数 (var を使用して宣言) は、null 許容参照型です。 前のセクションで示した通り、スタティック分析によってローカル変数の "null 状態" が決定され、それが "null の可能性あり" かどうかが決定されます。
28
+
20
29
  ご質問とは関係ありませんが、入力を数値に変換できるとは限らない('a'などが入力されるかもしれない)ので、ParseではなくTryParseを使ってください。
21
30
 
22
31
  [Int32.TryParse メソッド (System) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.tryparse?view=net-6.0)

1

追記

2022/09/03 21:36

投稿

jhashimoto
jhashimoto

スコア838

test CHANGED
@@ -17,3 +17,6 @@
17
17
  >
18
18
  > string? name;
19
19
 
20
+ ご質問とは関係ありませんが、入力を数値に変換できるとは限らない('a'などが入力されるかもしれない)ので、ParseではなくTryParseを使ってください。
21
+
22
+ [Int32.TryParse メソッド (System) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.tryparse?view=net-6.0)