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 關注
- 135 瀏覽
添加回答
舉報