public Dictionary<string, string> Data { get; set; }
上記のコード行では、スタイルエラーメッセージが表示されます。CA2227コレクションプロパティは読み取り専用にする必要があります。CA2227辞書とは何ですか?
Stylecop抑制を追加したり、独自の読み取り専用辞書クラスを作成せずにこのエラーを回避する方法はありますか?
public Dictionary<string, string> Data { get; set; }
上記のコード行では、スタイルエラーメッセージが表示されます。CA2227コレクションプロパティは読み取り専用にする必要があります。CA2227辞書とは何ですか?
Stylecop抑制を追加したり、独自の読み取り専用辞書クラスを作成せずにこのエラーを回避する方法はありますか?
"set"キーワードを削除する必要があるようです。
private readonly Dictionary<string, string> data = new Dictionary<string, string>();
public Dictionary<string, string> Data { get { return this.data; } }
多くの場合、コレクションを再割り当てする必要はありませんが、既存のコレクションを消去するだけで済みます。 私はこの警告がどこから来るのかと思います。上記のサンプルは、私がほとんどの時間を使っているアプローチです。
わからないけど、次はエラー抑えるかもしれない:正直に言うと
public Dictionary<string, string> Data { get; private set; }
を、原因なスタイルの誰かの主観的な考え方(別名StyleCopとFxCopの)へのご発展を妨げるために愚かです。
これは、StyleCopではなく、コード解析(以前はFxCopという名前の)警告です。 これはCA2227ではなくCA2227です。
this MSDN articleを参照してください。これは、問題についてかなり自明です。
はそれを修正するには、以下の(プライベートセッター)を試してみてください。
public Dictionary<string, string> Data { get; private set; }
私は間違ったコードと間違った警官と私の悪い申し訳ありません! – DevDave
私はCA2227はあなたが読み取り専用Dictionary<,>
を提供するように求めていることはないと思います。むしろStyleCopはディクショナリを直接設定することができると不平を言います。警告を消すには、設定者を削除してください。さらに、あなたのクラスはあなた自身のAdd
とClear
メソッドを提供するかもしれません。詳細は、http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspxを参照してください。
私がこの特定の推奨/警告で見つけた問題は、「修復する」という開発者は、しばしば元のコレクションへの参照を使用するのではなく、しばしば不要なコピーをコーディングするということです。例えば、私は次の行を持っている:
myThing.Items = GetItems();
をそしてdevがして、それを修正します。)
var items = GetItems();
foreach (var item in items)
{
myThing.Items.Add(item);
}
(のgetItemsを想像してみ百万アイテムのコレクションを返します。これはどのようにして良いことですか?私はマイクロソフトが「このルールから警告を除外しないでください」と述べています。少し強くなるMSDNで!
ありがとうございました。私はそれに似たものを試してみましたが、それほど時間がかかりませんでした。 – DevDave