簡體   English   中英

顯式與隱式調用ToString()

[英]Explicit vs implicit call of ToString()

當方法調用接受類型對象作為參數時,在字符串生成器上調用ToString()方法有什么好處?

StringBuilder sb = new StringBuilder("Hello");

System.Console.WriteLine(sb);

要么

System.Console.WriteLine(sb.ToString());

據我所知,WriteLine將對象作為重載,我的猜測是然后在該對象上調用ToString()方法,然后該對象再調用StringBuilder.ToString()方法並返回預期的字符串值。

再次重申,顯式調用ToString()有什么好處嗎? 你能證明你的答案合理嗎?

唯一的好處是很清楚您在做什么。 如果您可以明確聲明某些內容,則可以使代碼更具可讀性。

“我的猜測是然后在對象上調用ToString()方法”

如果查看MSDN,您會發現沒有直接使用StringBuilder重載,因此使用了接受any( object )的重載。

因此,您的猜測是正確的,它將僅調用ToString

如果value為null,則僅寫入行終止符。 否則,將調用value的ToString方法以生成其字符串表示形式,並將結果字符串寫入標准輸出流。

然后,我寧願自己調用它,因為它更易讀,並且通過傳遞StringBuilder一無所獲。

顯式調用ToString()有什么好處?

Console.WriteLine(object)將首先檢查對象是否為null,如果是,則僅輸出一個空行。 在空對象上調用ToString將導致NullReferenceException。

因此WriteLine(object)已內置了null安全性,並且null的結果將與輸出空字符串的非null對象相同。 根據上下文的不同,無效安全性可能很方便,或者可能導致不良行為。

總之,它更利於調用toString(),如果你不想被抑制一個NullReferenceException

不,沒有好處。 實際上,具有良好靜態分析功能的工具(例如ReSharper)將使您知道該調用是多余的並且可以安全地刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM