public Dictionary<string, string> Data { get; set; }
通過上面的代碼行,我得到一個樣式警察錯誤,CA2227集合屬性應該是隻讀的。CA2227 With Dictionary有什麼解決方法?
有沒有什麼方法可以在不添加Stylecop抑制或創建自己的只讀字典類的情況下移過該錯誤?
public Dictionary<string, string> Data { get; set; }
通過上面的代碼行,我得到一個樣式警察錯誤,CA2227集合屬性應該是隻讀的。CA2227 With Dictionary有什麼解決方法?
有沒有什麼方法可以在不添加Stylecop抑制或創建自己的只讀字典類的情況下移過該錯誤?
看起來你只需要刪除「設置」關鍵字。例如:
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)。
這是一個代碼分析(以前稱爲FxCop)警告,而不是StyleCop。 這是CA2227,而不是CA1227。
請參閱this MSDN article這是很明顯的問題。
請嘗試以下(私人二傳手),以解決它:
public Dictionary<string, string> Data { get; private set; }
對不起,我的壞錯誤的代碼和錯誤的警察! – DevDave 2012-01-31 13:14:57
我不認爲CA2227要求您提供一個只讀Dictionary<,>
。相反StyleCop抱怨你可以直接設置字典。你應該刪除setter和/或使其私下襬脫警告。此外,您的班級可能會提供您自己的Add
和Clear
方法。詳情請參閱http://msdn.microsoft.com/en-us/library/ms182327%28VS.80%29.aspx。
我發現這個特別的建議/警告的問題是,「修復它」的開發人員通常最終會編寫經常不必要的副本,而不是使用對原始集合的引用。例如,我有以下行:
myThing.Items = GetItems();
而且開發與修復它:
var items = GetItems();
foreach (var item in items)
{
myThing.Items.Add(item);
}
想象GetItems()返回的百萬項的集合。這怎麼可能是一件好事?我發現微軟的聲明「不要排除此規則的警告」。在MSDN中有點強大!
謝謝。我確實嘗試過類似的東西,但並不完全,有那麼一段時間! – DevDave 2012-01-31 13:08:07