C# 为什么构造函数中的空字符串参数不会引发异常?

C# 为什么构造函数中的空字符串参数不会引发异常?,c#,.net-core,nullable-reference-types,C#,.net Core,Nullable Reference Types,我已经看过了,但不明白为什么在启用了null引用类型的情况下,当我在构造函数中为字符串参数传递null时没有得到异常 构造函数参数不被视为不可为null吗 这是我的构造函数: 公共ApiClient(字符串baseUrl、字符串授权令牌){ 字符串testString=null; _apiClientBaseUrl=baseUrl??抛出新的ArgumentNullException($“{nameof(baseUrl)}不能为null”); _authorizationToken=author

我已经看过了,但不明白为什么在启用了null引用类型的情况下,当我在构造函数中为字符串参数传递null时没有得到异常

构造函数参数不被视为不可为null吗

这是我的构造函数:

公共ApiClient(字符串baseUrl、字符串授权令牌){ 字符串testString=null; _apiClientBaseUrl=baseUrl??抛出新的ArgumentNullException($“{nameof(baseUrl)}不能为null”); _authorizationToken=authorizationToken??抛出新的ArgumentNullException($“{nameof(authorizationToken)}不能为null”); } 我确实得到了
string testString=null的错误行。
如果我删除编码的空测试,我可以为2个属性传递空值,并且不会得到任何错误。对象将很好地实例化

我在一个.NET Core 3.1项目中,在.csproj文件中有以下内容:


netcoreapp3.1
使可能
CS8600;CS8602;CS8603;CS8625
真的

可空引用类型仅用于编译时静态分析,状态为:


可空引用类型不是新的类类型,而是现有引用类型上的注释。编译器使用这些注释来帮助您在代码中查找潜在的空引用错误不可为null的引用类型和可为null的引用类型之间没有运行时差异。编译器不会为不可为null的引用类型添加任何运行时检查。好处在于编译时分析。编译器生成警告,帮助您查找和修复代码中潜在的空错误。声明意图,当代码违反意图时,编译器会发出警告


它不是这样工作的:-“这些警告是在编译时发出的。编译器不会在可为null的上下文中添加任何null检查或其他运行时构造。在运行时,可为null的引用和不可为null的引用是等效的。”请确保包含实际的编译器错误(或警告,它们可能被视为错误)。请参阅这篇关于
的文章,这可能会帮助您抓住编译时间。注意:如果您正在引用另一个项目中的DLL,仍然无法正常工作,很遗憾。。。运行这段代码时,我在调用
new ApiClient(null,null)
@Abion47时遇到了预期的错误。您错过了OP问题中的“如果我删除了编码的null测试,我可以为2个属性传递null,并且不会得到任何错误”部分。我最初也是这样做的=)@user2864740-感谢您提供的信息,但我确实收到了“string testString=null;”行的编译时错误。代码不会使用“TreatWarningAsErrors”选项编译。我向该构造函数添加了以下行:TestMethod(null);TestMethod(testString);TestMethod(baseUrl);这个方法是:private void TestMethod(string testString){string x=testString;}我得到前两行的红色squgglies,但第三行没有。