吹毛求疵C#(1)明确赋值检查缺陷
喜歡c#, 所以期望也比較高, 也就會留意一些不起眼的小缺陷, 也就會有很多改進的設想, 也就希望能和更多的朋友分享這些發現和暢想.
(1)明確賦值檢查缺陷
?
截止到目前的MS C#4.0版編譯器為止, 關于明確賦值檢查都存在一個令人不爽的詭異問題, 而且也與ECMA標準不一致. 如下例所示:
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是能編譯通過的, 而B和D不行. 而事實上這4個例子都是"明確賦值"的, 而且按照ECMA標準也都應該是"明確賦值"的. 但當前編譯器的實現卻有著自己詭異的規則.
雖然這對手寫的代碼不會帶來什么問題, 換個寫法就是了, 可是對于代碼生成器來說, 卻著實添了不少亂. 就想稀世的臉上落了只蒼蠅, 無傷大雅, 但確實讓人很不爽.
?
09年6月我把這個問題反饋給了微軟, 9月份有了解決方案......實現沒改, 沒問題,語言標準改了...這樣就沒有不一致了... 打哪指哪, 先射箭后畫靶嘛.
相關鏈接:https://connect.microsoft.com/VisualStudio/feedback/details/468882/definitely-assigned-after-true-expression-detection-works-improperly#
如果您也喜歡C#語言, 并且發現了問題或有建議, 請反饋給開發者們, 讓他們能做的更好.
轉載于:https://www.cnblogs.com/robird/archive/2010/06/24/1764374.html
總結
以上是生活随笔為你收集整理的吹毛求疵C#(1)明确赋值检查缺陷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: frame或者iframe的conten
- 下一篇: c# char unsigned_dll