我正在编写的一个类实现了 IDictionary<string, object> 。在我的 CopyTo 实现中,我想使用代码契约:像 Contract.Requires<ArgumentNullException>(array != null) 这样的东西。

但是,我收到了这个警告(为了可读性删除了一些命名空间):

方法'LuaDictionary.CopyTo(KeyValuePair<String,Object>[],Int32)'实现了接口(interface)方法'ICollection<KeyValuePair<String,Object>>.CopyTo(KeyValuePair<String,Object>[],Int32)',因此不能添加Requires

我看到有一些相关的问题,但它们似乎都与用户控制下的接口(interface)有关。显然,IDictionary<T, U> 不在我的控制之下,所以我不能用 ContractClassFor 或类似的东西来注释它。

所以我不能在这里使用代码契约(Contract)吗?如果是这样......主要的无赖......

最佳答案

这是一个无赖,但可以理解,因为使用您的类的实例作为 IDictionary<string, object> 的客户端代码不应该满足 IDictionary<string, object> 不期望的先决条件。
您可以阅读提供给 this SO question 的答案,该答案链接并引用了 Code Contracts User Manual,您可以查看 this article ,它以这种方式解释了这种情况,并继续提供一个简单的示例:

关于c# - 从像 IDictionary<T, U> 这样的接口(interface)派生时如何使用代码契约?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3848420/

10-14 15:32
查看更多