変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

CS8602

[C#]warning CS8602: null 参照の可能性があるものの逆参照です。

よく判らない警告が出る。

JsonArray arr = jsonNode.AsArray();
string[] paramArray = new string[arr.Count];
ArrayList list = new ArrayList();
for (int i = 0; i < arr.Count; i++)
{
    list.Add(arr[i].ToString()); ※「warning CS8602: null 参照の可能性があるものの逆参照です。」が発生する。
}
return paramArray;

正解は、

JsonArray arr = jsonNode.AsArray();
string[] paramArray = new string[arr.Count];
ArrayList list = new ArrayList();
for (int i = 0; i < arr.Count; i++)
{
    var ji = arr[i];
    list.Add((ji != null)?ji.ToString():"");
}
return paramArray;

arr[i] は何の型かは不定だから、var宣言の変数に格納するしか手段はない。

そう明示的に書けば、CS8602も大人しくなる。

が・・・

普通の型の配列子にはしつこい。

関数(... string?[]? paramArray) {
・・・
object?[] param = new object?[] { null, null, null, null};
if (paramArray != null)
{
    param[0] = paramArray[0].Replace("%EXEPATH%", Resource.GetExePath());
}
t.InvokeMember(methodName,
    BindingFlags.InvokeMethod,
    null,
    obj,
    param);

は、

関数(... string?[]? paramArray) {
・・・
object?[] param = new object?[] { null, null, null, null};
if (paramArray != null)
{
    var p0 = paramArray[0];
    if (p0 != null)
    {
        p0 = p0.Replace("%EXEPATH%", Resource.GetExePath());
    }
    param[0] = p0;
}
t.InvokeMember(methodName,
    BindingFlags.InvokeMethod,
    null,
    obj,
    param);



top