4

私は考えていた :

このコードを書く:

 DataRow[] g = new DataRow[1] ;
 var t=new StringBuilder().AppendFormat("{0}", g[0]["aaa"].ToString());

Resharper は次のように表示します: (灰色に注目してください)

ここに画像の説明を入力

ここに画像の説明を入力

3 questions please

1) ToString() を削除すると、オブジェクトは削除された () を呼び出さずに表示文字列をどのように出力しますToStringか?

2)彼はすでに内部的に呼び出しているので、それを削除することを提案していますか?または別の理由のためですか?

3) ToString() を削除しないと、2回呼び出されますか?

4

2 に答える 2

8

はい、AppendFormat(like String.Format) は内部的に既に文字列に変換しており、String.ToString常に冗長であるため、冗長です。

実際には、ICustomFormatter.Format提供されたすべてのパラメーターでメソッドを使用します。

役に立たないという点でも冗長です。したがって、複数回実行する必要がない場合でも (AppendFormat文字列を文字列に変換しようとはしません)、とにかく実行するので無意味AppendFormat です。したがって、resharper はここでコードを単純化しようとします。

于 2012-10-31T11:42:54.547 に答える
4

あなたは見たいと思うかもしれません:複合フォーマット

処理順序

フォーマット項目に対応するパラメータ リストの各値は、次のリストの手順を実行することによって文字列に変換されます。最初の 3 つのステップのいずれかの条件が true の場合、値の文字列表現がそのステップで返され、後続のステップは実行されません。

  1. フォーマットする値が null の場合、空の文字列 ("") が返されます。
  2. 複合書式設定メソッドに、ICustomFormatter インターフェイスも実装する IFormatProvider 型のパラメーターが含まれている場合、値は ICustomFormatterFormat メソッドに渡されます。
  3. 値が IFormattable インターフェイスを実装している場合、その IFormattableToString メソッドが呼び出されます。
  4. Object クラスからオーバーライドまたは継承された型の ToString メソッドが呼び出されます。

DataRowはorから継承しているように見え、orをSystem.Object実装していないようですが、そのメソッドは内部で文字列表現を取得するために呼び出され、明示的であることは冗長と見なされます。IFormatProviderIFormattableToStringToString.ToString

于 2012-10-31T11:44:12.267 に答える