2011-11-23 70 views
5

我有一個流暢的,可擴展的驗證幫助,如:禁止CA1062用流利的驗證

Assert.That(aParameter).IsNotNull(); 

它是可擴展的,因爲這種方法實際上是通用的(即<牛逼>),並使用隱式類型返回通用IAssertCondition <T>對象。 IsNotNull實際上是一種擴展方法。

無論如何,使用這種方法驗證傳遞給方法的參數的問題是,我得到了CA1062警告,指示我在使用它們之前驗證參數,當然,我已經在這樣做。

我讀了埃裏克史密斯的帖子(here)關於使用ValidatedNotNullAttribute來通知FxCop該參數正在驗證,但我沒有看到我可以如何使用我所描述的流暢接口來實現這一點。

我的選擇是什麼,以便代碼分析可以識別上述語句是否滿足要求,並且警告不會出現?

回答

4

在這種情況下,您可以添加屬性的唯一位置在That<T>方法的參數上。不幸的是,儘管這樣可以防止CA1062被觸發,但它可能會導致錯誤的否定,因爲您需要調用不止That<T>才能真正實現「非空」驗證。如果你想使用代碼分析來正確地檢查參數驗證的方式來識別你的驗證助手,那麼你將不得不編寫自己的規則來替換CA1062。

+0

你能指點我解釋如何編寫自己的規則的任何資源,所以我可以看到涉及到什麼?謝謝! – SonOfPirate

+0

沒有官方規則編寫SDK。最完整的資源是http://binarycoder.net/fxcop/index.html。 –

+0

非常好,我會給它一個閱讀。 – SonOfPirate