我遇到了FxCop warning CA1006,Microsoft.Design「DoNotNestGenericTypesInMemberSignatures」問題。具體而言,我正在設計一個ReportCollection<T>
類,它繼承自ReadOnlyCollection<Report<T>>
,其public
構造函數將IList<Report<T>>
作爲參數。FxCop警告CA1006有什麼好的解決方法嗎?
固定此警告的建議是不是非常有用:
「要修復與該規則的衝突,改變設計以刪除嵌套式的說法。」有兩種方法,我可以這麼遠看改變設計的建議:
- 使構造
internal
。這在我的情況下不起作用。構造函數必須是public
,因爲此集合類需要通過程序集外部的代碼實例化。 - 使構造函數採取
Report<T>[]
而不是IList<Report<T>>
。這是次優的,因爲外部代碼應該具有使用動態大小的數據結構(如List<T>
)而不是固定大小數組的靈活性。
在這一點上,我放棄並壓制了這個警告。有更好的解決方案嗎?
我不會對嵌套的「安全」級別設置任何限制。泛型類型應儘可能嵌套語義所需。接口對協方差和反變換支持的限制意味着期望'IDictionary>`將不能接受`IDictionary <字符串,列表>`,但是當嵌套的泛型在語義上正確時,我傾向於使用它們而不是試圖解決它們。 –
supercat
2014-06-02 18:26:01