6

CA1305 は、を必要とするオーバーロードが存在するIFormatProviderが、このオーバーロードがコードで使用されていない場合に発生します。

たとえば、次のコードはこの警告を発生させます。

string.Format("{0} - {1}", id, name);

この警告を取り除く明白な方法は、使用するカルチャを指定することです。

string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name);

ただし、これは冗長すぎると思います。

どのような選択肢がありますか?

4

1 に答える 1

2

明示的なフォーマットプロバイダーの受け渡しを維持しながら、冗長性の低下につながるほとんど唯一の代替手段は、カルチャ固有のファサードメソッドを使用することです。幸いなことに、通常はInvariantCultureとCurrentCultureのフォーマットのみであるため、基礎となるフォーマットメソッドごとに2つのファサードメソッドのみが必要になります。

サンプルコードの一般的なファサードメソッドには、次のような署名があります。

public static string FormatForInvariantCulture(this string template, params object[] substitutions)

そして次のように呼ばれます:

"{0} - {1}".FormatForInvariantCulture(id, name);

ファサードメソッドを整理するための別のアプローチは、IoC技術を使用して注入できる文化固有のフォーマッタータイプになります。たとえば、次のようなインターフェイスをフォーマット用に定義できます。

public interface IFormatter
{
    string Format(string template, params object[] substitutions);
}

次に、カルチャ固有のインスタンスを、次のようなコンストラクターを使用してフォーマットを実行する必要があるタイプに注入できます。

public SomeClass(IFormatter systemFormatter, IFormatter uiFormatter)
{
    // ...
}

ファサードメソッドのパッケージ化方法に関係なく、CA2241(ProvideCorrectArgumentsToFormattingMethods)はメソッドの使用法を調べないことを考慮することが重要です。そのため、カスタムルールを追加することを検討する価値があるかもしれません。

于 2012-10-22T11:48:46.080 に答える