Visual Studio 2022 - エラー・警告 - 警告 CS86xx


 クラウディア


1. 概要
2. CS8600
3. CS8601
4. CS8602
5. CS8603
6. CS8604
7. CS8605
8. CS8616
9. CS8625
10. CS8629
11. 参考サイト

1. 概要

 「Visual Studio 2022」「.NET 8」では、「Null」の可能性や、「Nullable」であるかどうかのチェックが、厳しくなっています。  「CS86xx」は、たいていこの手の警告になります。

2. CS8600

 下記のようなメッセージが表示されます。
Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。
 「C#」のこのような文で出力されます。

string name = null;
 これは、「C#」での「Null」チェックが厳しくなったために出力されるようになりました。  下記のように書き換えます。

string? name = null;
 型名の後ろに「?」をつけることで、この変数が「Nullable」である旨を定義してやれば、解消します。

3. CS8601

 下記のようなメッセージが表示されます。
Null 参照代入の可能性があります。
 「Null」の可能性のある参照型の代入値が、「Non-nullable」な変数に代入されるときに、表示されます。  例えば、下記のような構文。

className.menberValue = cmb.SelectedItem.ToString();
 上記のような場合は、まず、代入先を「Nullable」にするのと。

public string ? menberValue { get; set; }
 代入時の構文を以下のように変更します。

className.menberValue = cmb.SelectedItem?.ToString();

4. CS8602

 下記のようなメッセージが表示されます。
null 参照の可能性があるものの逆参照です。
 下記のような構文で、発生します。

e = v.GetObject();
classA tmp = e.somValue;
 上記の場合、「e」が「Null」である可能性があるために、この警告になります。  下記のように、「Null」チェックを行ったうえで、実行文を記述するようにします。

e = v.GetObject();

if (e != null)
{
	classA tmp = e.somValue;
}
 あるいは、このような構文で発生する場合。

var result = s.Length;
 上記で、「s」が非「Null」であることがわかっているならば、下記のような書き方もできます。

var result = s!.Length;

5. CS8603

 下記のようなメッセージが表示されます。
Null 参照戻り値である可能性があります。
 下記のようなメソッドで、発生します。

public string somMethod(IEnumerable source)
{
    return source.some();
}
 この場合。

public string? somMethod(IEnumerable source)
{
    return source.some();
}
 と戻り値が、「Nullable」であることにすれば、この箇所は、解消しますが、このメソッドを呼び出している箇所が、芋づる式に警告になる恐れがあります。  芋づる式を避けたい場合、下記のような書き方もあります。

public string somMethod(IEnumerable source)
{
    return new string(source.some());
}

6. CS8604

 下記のようなメッセージが表示されます。
'type? class.Method(string name)' 内のパラメーター 'name' に Null 参照引数がある可能性があります。
 これは、「C#」での「Null」チェックが厳しくなったために出力されるようになりました。

public type? Method(string name)
 てなメソッドをコールしている、下記のような箇所に表示されます。

type? someValue = class.Method(someName);
 これは、メソッド側の定義で。

public type? Method(string? name)
 と、引数を宣言している、箇所の型名の後ろに「?」をつけることで、この引数が「Nullable」である旨を定義してやれば、解消します。

7. CS8605

 下記のようなメッセージが表示されます。
null の可能性がある値をボックス化解除しています。
 下記のような構文で、発生します。

ObjectId a = (ObjectId)cmb.SelectedValue;
 下記のように記述することで解消します。

ObjectId a = new ObjectId();

if (cmb.SelectedValue != null)
{
	a = (ObjectId)cmb.SelectedValue;
}

8. CS8616

 下記のようなメッセージが表示されます。
null 非許容の プロパティ 'Name' には、コンストラクターの終了時に null 以外の値が入っていなければなりません。'required' 修飾子を追加するか、プロパティ を Null 許容として宣言することを検討してください。
 下記のような、クラス宣言をしているときに、「public string Name」の行で発生します。

public class classA
{
    public string Name { get; set; }
    public double Value { get; set; }
}
 解消するには。

public string? Name { get; set; }
 のように「Nullable」な型として、定義するか。

public string Name { get; set; } = string.Empty;
 のように、「Null」以外の初期値を設定します。

9. CS8625

 下記のようなメッセージが表示されます。
null リテラルを null 非許容参照型に変換できません。
 下記のような構文で発生します。

public bool sumeMethod(out string text)
{
    text = null;
	...
}
 これは、変数を「Nullable」にするか。

public bool sumeMethod(out string? text)
 「null」以外の適切な初期値で初期化します。

text = string.Empty;

10. CS8629

 下記のようなメッセージが表示されます。
Null 許容値型は Null になる場合があります。
 下記のような構文で発生します。

double d = someMethod(a.Value);
 これは、下記のように書き換えることで、解消します。

double d = someMethod(a!.Value);

11. 参考サイト

 本ページは、「Google」大先生を参考にさせていただきました。

AbemaTV 無料体験
JETBOY
earthcar(アースカー)
ハイスピードプラン