2017-03-10 10 views
0

string.Formatを単一のプレースホルダで使用する必要はないと聞きました。 stringオブジェクトを返すmyMethod()stringInの代わりに何を使用しますか?CultureInfo.InvariantCultureを使用して、1つのプレースホルダだけを指定しますか?

例えば、どのようにCultureInfo.InvariantCultureを考慮し、それに応じて次のコードを変更することができ、

string myString = string.Format(CultureInfo.InvariantCulture, "{0}", myMethod()); 

はところで、私は1つのプレースホルダのみ

感謝を持って、次のようないくつかの既存のコードを変更しました。

+0

あなたは 'myString'で何をしたいですか? –

+0

あなたは何を達成しようとしていますか? 'myMethod'は何を返しますか? –

+4

特定の型(int、decimalなど)は、フォーマットプロバイダを受け入れるToString()のオーバーロードを提供します。 myMethod()がそのような型を返す場合は、myMethod()。ToString(CultureInfo.InvariantCulture)を使用できます。そしてその型がToString()のようなオーバーロードを提供しないなら、その文字列表現には文化が無関係である可能性が高い。 – Evk

答えて

3

私のコメントに少し拡大してください。 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()に置き換えてください。

関連する問題