2012-01-31 18 views
3
public Dictionary<string, string> Data { get; set; } 

上記のコード行では、スタイルエラーメッセージが表示されます。CA2227コレクションプロパティは読み取り専用にする必要があります。CA2227辞書とは何ですか?

Stylecop抑制を追加したり、独自の読み取り専用辞書クラスを作成せずにこのエラーを回避する方法はありますか?

答えて

7

"set"キーワードを削除する必要があるようです。

private readonly Dictionary<string, string> data = new Dictionary<string, string>(); 

public Dictionary<string, string> Data { get { return this.data; } } 

多くの場合、コレクションを再割り当てする必要はありませんが、既存のコレクションを消去するだけで済みます。 私はこの警告がどこから来るのかと思います。上記のサンプルは、私がほとんどの時間を使っているアプローチです。

+0

ありがとうございました。私はそれに似たものを試してみましたが、それほど時間がかかりませんでした。 – DevDave

3

わからないけど、次はエラー抑えるかもしれない:正直に言うと

public Dictionary<string, string> Data { get; private set; } 

を、原因なスタイルの誰かの主観的な考え方(別名StyleCopとFxCopの)へのご発展を妨げるために愚かです。

+3

同意しない。 StylecopとFxCopは素晴らしいです。 FxCopのすべての違反を修正するのはばかげている(開発チームが選んだすべてのスタイルコップのルールを修正するのは良いアイデアだが)、警告を生成することは常に**良いアイディアだ。 – ken2k

+0

私はこれを試しましたが、私はCA1811を持っています:セットは上流の公衆または保護された発信者を持たないようです。ああ、どのように私はスタイル/ Fxのコップが大好き! – DevDave

+0

@ ken2k:それは**あなたの意見です。私のものは違う。コンパイラの警告は常に良いです。 – leppie

2

これは、StyleCopではなく、コード解析(以前はFxCopという名前の)警告です。 これはCA2227ではなくCA2227です。

this MSDN articleを参照してください。これは、問題についてかなり自明です。

はそれを修正するには、以下の(プライベートセッター)を試してみてください。

public Dictionary<string, string> Data { get; private set; } 
+0

私は間違ったコードと間違った警官と私の悪い申し訳ありません! – DevDave

2

私はCA2227はあなたが読み取り専用Dictionary<,>を提供するように求めていることはないと思います。むしろStyleCopはディクショナリを直接設定することができると不平を言います。警告を消すには、設定者を削除してください。さらに、あなたのクラスはあなた自身のAddClearメソッドを提供するかもしれません。詳細は、http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspxを参照してください。

0

私がこの特定の推奨/警告で見つけた問題は、「修復する」という開発者は、しばしば元のコレクションへの参照を使用するのではなく、しばしば不要なコピーをコーディングするということです。例えば、私は次の行を持っている:

myThing.Items = GetItems(); 

をそしてdevがして、それを修正します。)

var items = GetItems(); 

foreach (var item in items) 
{ 
    myThing.Items.Add(item); 
} 

(のgetItemsを想像してみ百万アイテムのコレクションを返します。これはどのようにして良いことですか?私はマイクロソフトが「このルールから警告を除外しないでください」と述べています。少し強くなるMSDNで!

関連する問題