日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有BUG!!!慎用default文本

發布時間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有BUG!!!慎用default文本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

下面這段代碼,你能發現什么問題嗎?

public?static?int??Test1(string?str) {return?str?switch{"A"?=>?1,"B"?=>?2,"C"?=>?3,_?=>?default,}; } public?static?int??Test2(string?str) {switch?(str){case?"A":return?1;case?"B":return?2;case?"C":return?3;default:return?default;} }

好像沒什么問題,執行下列代碼:

Console.WriteLine("Test1:"?+?Test1("My?IO")); Console.WriteLine("Test2:"?+?Test2("My?IO"));

現在你看到問題了吧!Test1返回了int而不是int?的默認值!

什么是default文本

從 C# 7.1 開始,當編譯器可以推斷表達式類型時,可以使用 default 文本生成類型的默認值。default 文本表達式生成與 default(T)?表達式(其中,T 是推斷的類型)相同的值。可以在以下任一情況下使用 default 文本:

  • 對變量進行賦值或初始化時。

  • 在聲明可選方法參數的默認值時。

  • 在方法調用中提供參數值時。

  • 在 return 語句中或作為表達式主體成員中的表達式時。

bug

問題就在于,編譯器推斷錯了類型。

反編譯生成的代碼:

可以看到,編譯器把switch表達式中的default轉換成0,而把switch語句中的default轉換成null。

結論

解決方法也簡單,換成default(int?)或者直接用null。

總之,慎用default,你不知道編譯器都做了啥!

總結

以上是生活随笔為你收集整理的有BUG!!!慎用default文本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。