asp.net Dotnet编译器仅对可空数组的第一个数组解除可能为空的引用

esyap4oy  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(160)

我正在运行一个asp.net核心应用程序,我有一个类,它有一个字符串数组成员,我已经声明为nullable。当我在其他类中使用数组元素时,编译器只对数组的第一个成员给出可能为null引用的引用警告,而对其他成员则没有。
PS对不起的代码格式不好。没有语法错误
我收到一个警告,提示DummyData[0]可能为空值,但DummyData[1]和其他数据没有。

public class Dummy
{
    public string[]? DummyData { get; set; }
}

字符串
这就是我使用DummyData的地方

result += DummyDataConstants.SOM + DummyDataConstants.cmdMainArray[(int)DummyDataConstants.CMD_MAIN_ID_e.CMD_MAIN_REQ_LOG]
                                    + DummyDataConstants.FSP + DummyDataConstants.SMART_CODE + DummyDataConstants.FSP + commandParams.DummyData[0]  // warning given for commandParams.DummyData[0] 

+ DummyDataConstants.FSP + commandParams.DummyData[1]  // no warning here
+ DummyDataConstants.FSP + commandParams.MediaClientType + DummyDataConstants.FSP + commandParams.DummyData[2] + DummyDataConstants.FSP + newGuid.ToString() + DummyDataConstants.FSP + DummyDataConstants.EOM

wh6knrhe

wh6knrhe1#

只有当您的代码可能解引用null时,编译器才会发出警告。在这种情况下,只有在commandParams.DummyData[0]处才认为可能,因为如果它是(即commandParams.DummyData == null)您将在此处遇到NullReferenceException,因此,所有其他尝试要么不会发生,要么将与绝对非空引用一起工作。如果您将使用null-条件元素访问操作符对于第一个元素,您将看到警告“transfered”到下一个元素:

void WarningTest(int[]? array)
{
     Console.WriteLine(array?[0]);   
     Console.WriteLine(array[0]); // warning 
     Console.WriteLine(array[0]); // no warning 
}

字符串
sharplab.io

相关问题