簡體   English   中英

是否可以禁用隱式ToString()調用?

[英]is it possible to disable implicit ToString() call?

我想知道是否有一種方法可以獲得此代碼的編譯錯誤:

var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer);

所以我將被迫寫下這樣的東西:

var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer.FormatAddress());
Console.WriteLine("Customer accounts:" + customer.FormatAccounts());

如果“ToString”是一個接口,我可以在我的類中使用顯式接口實現。

謝謝。

在編譯時無法阻止此代碼。 Object.ToString是每個對象的公共協定的一部分,並且沒有辦法阻止它在編譯時被調用。 在這種特殊情況下,編譯器將解析+String.Concat(object, object) ,實現最終調用Object.ToString 沒有辦法改變這一點。 我認為你最FormatAddress路徑是覆蓋ToString並讓它調用FormatAddress

請不要像其他一些人所建議的那樣更改ToString以拋出異常。 大多數.Net都希望ToString存在並且不會拋出。 更改它會對程序產生許多意外的負面影響(包括終止這些對象的調試體驗)

您可以在客戶類中覆蓋ToString,如果需要,可以在其中調用FormatAddress方法。

public override string ToString()
{
    return FormatAddress();
}

大多。

通過使用這個Roslyn分析器 ,如我對這個問題的回答所示。

如果您覺得它很有用,請在那里提供原始答案的貢獻者。

暫無
暫無

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

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