[英]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.