私のコメントに少し拡大してください。 String.Format
そのToString
を呼び出し、そこにあなたのフォーマッタを渡します -
public interface IFormattable
{
string ToString(string format, IFormatProvider formatProvider);
}
引数が、それを実装する場合は、各引数には、String.Format
チェックは、オブジェクトは、次のようになりますIFormattable
インタフェースを実装している場合。それ以外の場合は、フォーマッタを提供せずに通常のToString
と呼ばれます。
多くの種類(.NET Frameworkと第三者の両方)が、このインターフェイスを実装しています(すべての数値型、日付時刻など)。 IFormattable
を実装している場合、あなたのmyMethod()
リターンタイプ - ちょうど(便宜上、ほとんどのようなタイプでもIFormattable
インターフェイスの一部ではない1つのパラメータでToString
を実装)ToString
自分自身を呼び出す: - タイプは、このようなインタフェースを実装していない場合は
myMethod().ToString(CultureInfo.InvariantCulture)
String.Format
は、何も役に立ちません(渡したフォーマッタを使用しません)。何も失われません。
UPDATE:あなたの引数は文字列なので、フォーマッタをString.Format
に渡す必要はありません。具体的にはString.Format
を使用してください。 Formatterはに変換され、特定の規則を使用してオブジェクトを文字列に変換します。文字列はすでに文字列です。
あなたの古いコードには複数の引数があり、そのうちのいくつかは文字列ではない可能性があり、文化を渡すことは理にかなっています。誰かが安全な側にいて、すべての引数が文字列であっても、誰が後で起こるかを知っているので、文化を渡すことに決めるかもしれません - 誰かが引数を増やすか、現在の引数が型を変えるかもしれません。不変の文化を受け入れるようにString.Format
を変更してください。だから一般的に、そのようなアプローチは理にかなっています。
しかし、1つの引数が残っていて、それが文字列の場合、このような複雑さについては意味がありません。String.Format
ステートメントを完全に削除し、myMethod()
に置き換えてください。
出典
2017-03-10 17:03:13
Evk
あなたは 'myString'で何をしたいですか? –
あなたは何を達成しようとしていますか? 'myMethod'は何を返しますか? –
特定の型(int、decimalなど)は、フォーマットプロバイダを受け入れるToString()のオーバーロードを提供します。 myMethod()がそのような型を返す場合は、myMethod()。ToString(CultureInfo.InvariantCulture)を使用できます。そしてその型がToString()のようなオーバーロードを提供しないなら、その文字列表現には文化が無関係である可能性が高い。 – Evk