1 回答
TA贡献1830条经验 获得超3个赞
我仍然想知道是否有解决方案来防止此编译器警告
我认为你的意思是,除了明显的#pragma方法之外:
#pragma warning disable 8602
new Program
{
NullableDictionary = { ["key"] = "value" }
};
#pragma warning restore
这显然有效。或者,当然,上面的“可空引用类型”特定版本:
#nullable disable
new Program
{
NullableDictionary = { ["key"] = "value" }
};
#nullable restore
这两者都暂时且明确地禁用相关警告。空值宽容运算符本质上就是这样做的,当然除了它所应用的特定表达式之外。
无论好坏,我认为没有一种方法可以完全满足您的要求。通常,仅在实际变量声明中才允许使用集合初始值设定项语法。在对象初始化语法上下文中使用它是该语言允许的一种特殊情况,基于场景的相似性,即使生成的代码与实际的变量初始化非常不同(特别是,您在其中事实上,在初始化集合的同时初始化变量的值)。
因此,当编译器处理集合初始值设定项语法时,编译器所要做的就是生成对方法的一堆调用Add(),并且这些调用是对可能为 null 的引用值进行的,根据您之前的声明。
话虽如此,我发现您尝试在那里使用 null-forgiving 运算符非常明智。Add()如果编译器能够通过在其生成的每个调用中包含该运算符来解释该上下文中运算符的使用,那就太好了。
您甚至可以针对该语言提交 Git 问题,并要求将其添加为一项功能。我认为这不会是一个重大变化,因为该语法目前完全是非法的,并且当您不使用该语法时允许它不会改变编译器的行为。
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报