5

ToString()オーバーライドの規則は何ですか?問題のクラスには、Nameプロパティと。の両方がありますId

4

7 に答える 7

7

あなたがする必要があることをしなさい。.Equals()andのようなものをオーバーライドする場合のように、それ自体は規則はありません.GetHashCode()

実行中に中断したときにデバッガーに表示される内容に影響を与えたい場合は、使用しないでくださいToString()-を使用してDebuggerDisplayAttributeください。

于 2012-11-26T12:50:28.617 に答える
2

次のリンクを参照できます

System.Object.ToString()をオーバーライドし、IFormattableを実装する

C#プログラミングのToStringメソッドの謎を解き明かす

方法:ToStringメソッドをオーバーライドする

僕のバカゲ

  1. EqualsおよびGetHashCodeと同期している必要があります
  2. 解析メソッドと同期している必要があります(提供している場合)
  3. カスタムフォーマットが必要な場合は、IFormattableを使用してください
于 2012-11-26T12:54:32.293 に答える
1

慣習については知りません。私は通常、テキストの文脈で適切と思われるものを印刷します。あなたのId文脈に適しているかもしれないし、そうでないかもしれません。

私の親指のルールは、ToString2つのオブジェクトがそうであるかどうかを明らかにする必要があるということですEquals

于 2012-11-26T12:49:44.147 に答える
1

私の知る限り、ToString()の規則は、オブジェクト上の他の2つのオーバーライド可能なメソッドの規則に本質的にリンクされています-GetHashCodeおよびEquals

つまりEquals、trueが返される場合、同じハッシュコードがによって生成される必要がありますGetHashCode。これに加えて、Equalstrueを返す場合はToString、同じ文字列を返す必要があります。

于 2012-11-26T12:50:21.050 に答える
1

の実装では、次のToString()3つのことに留意する必要があると思います。

  • 文字列表現は、人間が読み取れる必要があります。たとえば、ログ/コンソール出力に使用したり、DebuggerDisplay属性で使用したりできます。
  • クラスにメソッドがある場合は、呼び出しParseの結果を解析できるはずです。ToStringさらにmyInstance.Equals(MyClass.Parse(myInstance.ToString()))、次のように評価する必要がありますtrue
  • 2つのインスタンスが等しい場合、それらの文字列表現も等しくなければなりません。
于 2012-11-26T12:53:10.177 に答える
0

ここにいくつかのガイダンスがあります:

http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

ただし、クラスの使用目的に大きく影響すると思います。たとえば、表示されている場合、返品は、最終的に表示される可能性のあるユーザーに関連している必要があります。

于 2012-11-26T12:50:45.193 に答える
0

アプリケーション全体のすべてのToStringメソッドに、統一された再利用可能なソリューションを使用する必要があります。一般的なToStringHelperを手動でコーディングするか、stateprinterプロジェクトhttps://github.com/kbilsted/StatePrinterプロジェクトなどの外部ライブラリを使用します

于 2014-09-01T21:38:36.403 に答える