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


クラウディア 


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

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. CS8618

10. CS8625

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

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

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

text = string.Empty;

11. CS8629

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

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

double d = someMethod(a!.Value);

12. 参考サイト

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

サウンドハウス
AbemaTV 無料体験
5G CONNECT
【usus ウズウズ】
アフィリエイトのアクセストレード