回答編集履歴
3
見直しキャンペーン中
answer
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
警告は`ToString()`に出てるんじゃないですか?
|
1
|
+
警告は`ToString()`に出てるんじゃないですか?
|
2
|
-
|
2
|
+
|
3
|
-
```
|
3
|
+
```cs
|
4
|
-
using System.Diagnostics.CodeAnalysis;
|
4
|
+
using System.Diagnostics.CodeAnalysis;
|
5
|
-
#nullable enable
|
5
|
+
#nullable enable
|
6
|
-
|
6
|
+
|
7
|
-
public class Hoge
|
7
|
+
public class Hoge
|
8
|
-
{
|
8
|
+
{
|
9
|
-
[NotNull] private object? A;
|
9
|
+
[NotNull] private object? A;
|
10
|
-
|
10
|
+
|
11
|
-
public void Init() => A = new object();
|
11
|
+
public void Init() => A = new object();
|
12
|
-
|
12
|
+
|
13
|
-
public void Method()
|
13
|
+
public void Method()
|
14
|
-
{
|
14
|
+
{
|
15
|
-
// CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。
|
15
|
+
// CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。
|
16
|
-
string xxx = A.ToString();
|
16
|
+
string xxx = A.ToString();
|
17
|
-
|
17
|
+
|
18
|
-
// 警告は出ません
|
18
|
+
// 警告は出ません
|
19
|
-
string yyy = A.ToString() ?? "Null!";
|
19
|
+
string yyy = A.ToString() ?? "Null!";
|
20
|
-
}
|
20
|
+
}
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
|
23
|
-
// 蛇足
|
23
|
+
// 蛇足
|
24
|
-
private object B;
|
24
|
+
private object B;
|
25
|
-
|
25
|
+
|
26
|
-
// CS8618 null 非許容の フィールド 'A' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。フィールド を Null 許容として宣言することをご検討ください。
|
26
|
+
// CS8618 null 非許容の フィールド 'A' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。フィールド を Null 許容として宣言することをご検討ください。
|
27
|
-
public Hoge() => InitB();
|
27
|
+
public Hoge() => InitB();
|
28
|
-
|
28
|
+
|
29
|
-
[MemberNotNull(nameof(B))]
|
29
|
+
[MemberNotNull(nameof(B))]
|
30
|
-
private void InitB() => B = new object();
|
30
|
+
private void InitB() => B = new object();
|
31
|
-
}
|
31
|
+
}
|
32
|
-
```
|
32
|
+
```
|
33
|
-
|
33
|
+
|
34
|
-
---
|
34
|
+
---
|
35
|
-
|
35
|
+
|
36
|
-
通じていない気がするので追記
|
36
|
+
通じていない気がするので追記
|
37
|
-
|
37
|
+
|
38
|
-
> 毎回!マークを付けるのではなくAをobject?型ではなくobject型として扱いたいです
|
38
|
+
> 毎回!マークを付けるのではなくAをobject?型ではなくobject型として扱いたいです
|
39
|
-
> 少し前までNotNullAttributeを付けておこえば、上記を実現出来たのですが、この方法はバグだったのかVSを最新にするとワーニングが出るようになってしまいました。
|
39
|
+
> 少し前までNotNullAttributeを付けておこえば、上記を実現出来たのですが、この方法はバグだったのかVSを最新にするとワーニングが出るようになってしまいました。
|
40
|
-
|
40
|
+
|
41
|
-
`xxx`のところで「毎回bang(`!`)を付けるのが面倒だ」という話だと思っていたのですが、違うんでしょうか?
|
41
|
+
`xxx`のところで「毎回bang(`!`)を付けるのが面倒だ」という話だと思っていたのですが、違うんでしょうか?
|
42
|
-
|
42
|
+
|
43
|
-
`A`に警告が出るのは、ほかの方も指摘されているとおりです。
|
43
|
+
`A`に警告が出るのは、ほかの方も指摘されているとおりです。
|
44
|
-
|
44
|
+
|
45
|
-
しかし`xxx`に警告が出るのは全く別の話です。
|
45
|
+
しかし`xxx`に警告が出るのは全く別の話です。
|
46
|
-
`Object`では`public virtual string? ToString()`となっています。
|
46
|
+
`Object`では`public virtual string? ToString()`となっています。
|
47
47
|

|
2
通じていない気がするので追記
answer
CHANGED
@@ -29,4 +29,19 @@
|
|
29
29
|
[MemberNotNull(nameof(B))]
|
30
30
|
private void InitB() => B = new object();
|
31
31
|
}
|
32
|
-
```
|
32
|
+
```
|
33
|
+
|
34
|
+
---
|
35
|
+
|
36
|
+
通じていない気がするので追記
|
37
|
+
|
38
|
+
> 毎回!マークを付けるのではなくAをobject?型ではなくobject型として扱いたいです
|
39
|
+
> 少し前までNotNullAttributeを付けておこえば、上記を実現出来たのですが、この方法はバグだったのかVSを最新にするとワーニングが出るようになってしまいました。
|
40
|
+
|
41
|
+
`xxx`のところで「毎回bang(`!`)を付けるのが面倒だ」という話だと思っていたのですが、違うんでしょうか?
|
42
|
+
|
43
|
+
`A`に警告が出るのは、ほかの方も指摘されているとおりです。
|
44
|
+
|
45
|
+
しかし`xxx`に警告が出るのは全く別の話です。
|
46
|
+
`Object`では`public virtual string? ToString()`となっています。
|
47
|
+

|
1
警告間違い
answer
CHANGED
@@ -6,15 +6,16 @@
|
|
6
6
|
|
7
7
|
public class Hoge
|
8
8
|
{
|
9
|
-
// CS8618 null 非許容の フィールド 'A' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。
|
10
9
|
[NotNull] private object? A;
|
11
10
|
|
11
|
+
public void Init() => A = new object();
|
12
|
+
|
12
13
|
public void Method()
|
13
14
|
{
|
14
15
|
// CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。
|
15
16
|
string xxx = A.ToString();
|
16
17
|
|
17
|
-
//
|
18
|
+
// 警告は出ません
|
18
19
|
string yyy = A.ToString() ?? "Null!";
|
19
20
|
}
|
20
21
|
|
@@ -22,10 +23,10 @@
|
|
22
23
|
// 蛇足
|
23
24
|
private object B;
|
24
25
|
|
25
|
-
// CS8618 null 非許容の フィールド 'A' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。
|
26
|
+
// CS8618 null 非許容の フィールド 'A' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。フィールド を Null 許容として宣言することをご検討ください。
|
26
|
-
public Hoge() =>
|
27
|
+
public Hoge() => InitB();
|
27
28
|
|
28
29
|
[MemberNotNull(nameof(B))]
|
29
|
-
private void
|
30
|
+
private void InitB() => B = new object();
|
30
31
|
}
|
31
32
|
```
|