我正在编写的一个类实现了 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/