gpt4 book ai didi

c# - 代码契约(Contract)由于潜在的副作用而导致错误

转载 作者:行者123 更新时间:2023-11-30 17:06:25 24 4
gpt4 key购买 nike

我对代码契约(Contract)还很陌生,所以我可能刚刚在这里做了一些愚蠢的事情:)

我遇到了错误

Detected expression statement evaluated for potential side-effect in contracts of method '##'. (Did you mean to put the expression into a Requires, Ensures, or Invariant call?)

我有以下契约(Contract)

Contract.Requires<ArgumentNullException>(obj != null);
Contract.Requires<ArgumentNullException>(obj.Id != null);

第二个合约 obj.Id != null 失败(Id 是一个 Guid)

现在 Id 可以是 null,这在方法中是不允许的。但是代码契约(Contract)引发了上述编译错误。它自己的方法实际上并不返回任何东西,因此也不需要确保。

我已经删除了契约(Contract),以便我可以编译并放置一个标准的 if 检查。但这是什么原因造成的?

最佳答案

您需要将 Id 属性本身标记为 [Pure]

这将告诉代码契约分析器它没有副作用。

代码契约不喜欢你调用有副作用的方法;根据您是否启用了代码契约检查,您的代码会有不同的行为,这将是一件坏事。

例子:

public Guid Id
{
[Pure]
get
{
return _id;
}
}

还有一点:如果 Id 是一个 Guid,它怎么可能为 null? Guid 是一个结构,因此它不能为空。它可能是一个可为 null 的 Guid(即 Guid?)吗?

关于c# - 代码契约(Contract)由于潜在的副作用而导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com