1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
我仍然想知道是否有解決方案來(lái)防止此編譯器警告
我認(rèn)為你的意思是,除了明顯的#pragma方法之外:
#pragma warning disable 8602
new Program
{
NullableDictionary = { ["key"] = "value" }
};
#pragma warning restore
這顯然有效?;蛘?,當(dāng)然,上面的“可空引用類(lèi)型”特定版本:
#nullable disable
new Program
{
NullableDictionary = { ["key"] = "value" }
};
#nullable restore
這兩者都暫時(shí)且明確地禁用相關(guān)警告。空值寬容運(yùn)算符本質(zhì)上就是這樣做的,當(dāng)然除了它所應(yīng)用的特定表達(dá)式之外。
無(wú)論好壞,我認(rèn)為沒(méi)有一種方法可以完全滿(mǎn)足您的要求。通常,僅在實(shí)際變量聲明中才允許使用集合初始值設(shè)定項(xiàng)語(yǔ)法。在對(duì)象初始化語(yǔ)法上下文中使用它是該語(yǔ)言允許的一種特殊情況,基于場(chǎng)景的相似性,即使生成的代碼與實(shí)際的變量初始化非常不同(特別是,您在其中事實(shí)上,在初始化集合的同時(shí)初始化變量的值)。
因此,當(dāng)編譯器處理集合初始值設(shè)定項(xiàng)語(yǔ)法時(shí),編譯器所要做的就是生成對(duì)方法的一堆調(diào)用Add(),并且這些調(diào)用是對(duì)可能為 null 的引用值進(jìn)行的,根據(jù)您之前的聲明。
話(huà)雖如此,我發(fā)現(xiàn)您嘗試在那里使用 null-forgiving 運(yùn)算符非常明智。Add()如果編譯器能夠通過(guò)在其生成的每個(gè)調(diào)用中包含該運(yùn)算符來(lái)解釋該上下文中運(yùn)算符的使用,那就太好了。
您甚至可以針對(duì)該語(yǔ)言提交 Git 問(wèn)題,并要求將其添加為一項(xiàng)功能。我認(rèn)為這不會(huì)是一個(gè)重大變化,因?yàn)樵撜Z(yǔ)法目前完全是非法的,并且當(dāng)您不使用該語(yǔ)法時(shí)允許它不會(huì)改變編譯器的行為。
- 1 回答
- 0 關(guān)注
- 179 瀏覽
添加回答
舉報(bào)