【发布时间】:2011-03-05 00:08:38
【问题描述】:
在我的一个班级中,我有一个 ExpandoObject 类型的私有字段。该字段在构造函数中初始化(this.expected = new ExpandoObject()),所以我相信它永远不会是null。
因此,在这个类的一个方法中,我可以安全地添加
Contract.Assumes(this.expected != null)
在使用this.expected 之前,代码契约不必担心可能调用空对象。但是,我收到一条警告,而不是警告可能调用空引用的方法
对方法“Assume”的动态调度调用可能在运行时失败,因为一个或多个适用的重载是条件方法
方法签名和前几行代码如下所示:
protected void Expect(object values)
{
Contract.Requires<ArgumentNullException>(values != null);
Contract.Assume(this.expected != null);
var exp = (ICollection<KeyValuePair<string, object>>)this.expected;
在第三行,我收到警告
CodeContracts:可能在空引用“OddEnds.Testing.TestBase.o_SiteContainer0.p_Site3.Target”上调用方法
我假设空引用的奇怪签名是因为exp 是一个动态对象。
我该如何解决这些问题?
【问题讨论】:
-
你谈到了这个领域,扩展的,预期的。似乎它们都是同一个领域,但不可能进行逆向工程。检查您的问题是否准确。
-
抱歉 - 我有点太快了......正如你所假设的,它们都指的是同一个字段,现在称为
expected,就像在我的代码中一样。跨度> -
想知道如果将 Assume 替换为 Assert 是否会存在相同的警告?
标签: c# code-contracts