吹毛求疵C#(1)明确赋值检查缺陷
喜歡c#, 所以期望也比較高, 也就會(huì)留意一些不起眼的小缺陷, 也就會(huì)有很多改進(jìn)的設(shè)想, 也就希望能和更多的朋友分享這些發(fā)現(xiàn)和暢想.
(1)明確賦值檢查缺陷
?
截止到目前的MS C#4.0版編譯器為止, 關(guān)于明確賦值檢查都存在一個(gè)令人不爽的詭異問(wèn)題, 而且也與ECMA標(biāo)準(zhǔn)不一致. 如下例所示:
class DefinitelyAssignedTest {private static void CheckA(){int value;if (Maybe() && Expr(out value)){Console.WriteLine(value); //OK}} private static void CheckB(){int value;if (false && Expr(out value)){Console.WriteLine(value); //Error}}private static void CheckC(){int value;if (false && Expr(out value) && Expr(out value)){Console.WriteLine(value); //OK}}private static void CheckD(){int value;bool temp;if (temp = (Maybe() && Expr(out value))){Console.WriteLine(value); //Error}}static bool Expr(out int value){value = 1;return true;}static bool Maybe(){return (Environment.TickCount & 1) == 0;} }其中僅有A和C是能編譯通過(guò)的, 而B和D不行. 而事實(shí)上這4個(gè)例子都是"明確賦值"的, 而且按照ECMA標(biāo)準(zhǔn)也都應(yīng)該是"明確賦值"的. 但當(dāng)前編譯器的實(shí)現(xiàn)卻有著自己詭異的規(guī)則.
雖然這對(duì)手寫的代碼不會(huì)帶來(lái)什么問(wèn)題, 換個(gè)寫法就是了, 可是對(duì)于代碼生成器來(lái)說(shuō), 卻著實(shí)添了不少亂. 就想稀世的臉上落了只蒼蠅, 無(wú)傷大雅, 但確實(shí)讓人很不爽.
?
09年6月我把這個(gè)問(wèn)題反饋給了微軟, 9月份有了解決方案......實(shí)現(xiàn)沒(méi)改, 沒(méi)問(wèn)題,語(yǔ)言標(biāo)準(zhǔn)改了...這樣就沒(méi)有不一致了... 打哪指哪, 先射箭后畫靶嘛.
相關(guān)鏈接:https://connect.microsoft.com/VisualStudio/feedback/details/468882/definitely-assigned-after-true-expression-detection-works-improperly#
如果您也喜歡C#語(yǔ)言, 并且發(fā)現(xiàn)了問(wèn)題或有建議, 請(qǐng)反饋給開發(fā)者們, 讓他們能做的更好.
轉(zhuǎn)載于:https://www.cnblogs.com/robird/archive/2010/06/24/1764374.html
總結(jié)
以上是生活随笔為你收集整理的吹毛求疵C#(1)明确赋值检查缺陷的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: frame或者iframe的conten
- 下一篇: 4.3.6无分类编址CIDR(构成超网)