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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NET问答: 为什么 null + true = string 呢?

發(fā)布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NET问答: 为什么 null + true = string 呢? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

咨詢區(qū)

Javed Akram

請問 null + true 為什么是一個 string 類型的 True,代碼如下:

static?void?Main(string[]?args){string?b?=?null?+?true;Console.WriteLine(b);}

誰知道這背后的原理?

回答區(qū)

JaredPar

這是因為你一旦引入了 + ,C# 操作符綁定規(guī)則就起作用了,編譯器會幫你選擇 + 的最佳重載方法,比如下面這個:

string?operator?+(string?x,?object?y)

顯而易見,上面的 操作符重載 剛好就能容納你的 null + true,如果把代碼再補全一下就是 ((string)null) + true ,所以最后結(jié)果就是 True。

順便提一下,C# 語言規(guī)格書的第 7.7.4 節(jié)就聊到了這個決議。

點評區(qū)

其實這種問題挺無聊的,現(xiàn)實開發(fā)中應該沒人會這么寫吧,真有的話,要么是炫技,要么是 StringBuilder 的簡寫,我就簡單聊聊吧,主要有兩點。

  • 真的是 operator 嗎?

我翻遍了所有源碼都沒有找到所謂的 string operator +(string x, object y) ,最后不經(jīng)意間在 VS 的快捷提示中找到了。。。

真是強大的 VisualStudio,很顯然這是一個語法糖。

  • 反編譯 DLL 看底層實現(xiàn)邏輯

先說一下程序?qū)懺?.NETCore 3.1 上,我用 ILSpy 反編譯一下,如下圖:

看到?jīng)]有? 編譯器已經(jīng)幫你轉(zhuǎn)了一個更加簡單粗暴的寫法:string b = true.ToString() ?? ""; 這代碼意圖是不是更明顯 ?

什么,你說我 ILSpy 有問題,居然沒調(diào)用 String.Concat ?好吧,那我用 DnSpy 反編譯看看。。。

沒錯,就是一樣的寫法,連 String.Concat 都省了,????????

總結(jié)

以上是生活随笔為你收集整理的NET问答: 为什么 null + true = string 呢?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。