不要笑!写 | 还是 || ,还真是一个问题
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                不要笑!写 | 还是 || ,还真是一个问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                這么簡單的問題還寫?先不要笑。打開你代碼量最多的項目,搜索|或者&,看看有多少條這樣的代碼!
前不久,我在dotnet/machinelearning上提交了一個pull request。修改內容是把"|"改成"||", 把"&"改成"&&"。
你猜包含多少修改?總共46個文件,近200處修改!!!
為什么是問題
簡單來說,這些都是二元邏輯運算符。只是"|"和"&"運算符始終計算兩個操作數,"||"和"&&"運算符僅在必要時才計算右側操作數。
問題就出在始終計算上。
對于下面的代碼,你覺得有什么問題:
private?void?Test(User?user) {if?(user?==?null?|?user.Name?==?""){Console.WriteLine("公眾號“My?IO”");} }當程序運行時,如果碰到user對象為null,還是會計算user.Name,這會導致NullReferenceException。而編譯時不會有任何問題,因為是符合語法的。
因此,做邏輯判斷時,應始終使用"||"和"&&"運算符。
什么時候用"|"和"&"
為整形做位運算,也就是對1/0的運算,才是它們應該起作用的位置:
var?method?=?type.GetMethod("MethodName",?System.Reflection.BindingFlags.Public?|?System.Reflection.BindingFlags.Instance);結論
其實,大多數這種錯誤是輸入錯誤造成的。只是顯示不明顯,而且編譯器也不會做任何提示,所以容易被忽略,成為潛在的錯誤(相信微軟的程序員水平不會那么低的)。
個人建議,盡量使用靜態代碼掃描工具,可以有效減少或避免這類問題的發生。
如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!
總結
以上是生活随笔為你收集整理的不要笑!写 | 还是 || ,还真是一个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: NET问答: 为什么 IEnumerab
- 下一篇: C#位图BitArray 小试牛刀
