c#-4.0 - C# 4.0 中的代码契约

标签 c#-4.0 code-contracts design-by-contract

我做了这样的方法

class PersonCollection
{
  [Contracts.CanReturnNull]  //dont know if something like this exists?
  IPerson GetPerson(Guid personId)
  {
       if (this.persons.Contains(personId))
            return this.persons[personId];
       else
            return null;
  }
}

现在调用代码需要正确处理空值。有没有一种方法可以为所有调用者表达一个契约,即他们需要能够处理此方法返回的空值?

PersonCollection pc = new PersonCollection();
IPerson p = pc.GetPerson(anyId);
p.Name = "Hugo";  // here I want to have a curly line

我想要的是 p 被标记为潜在问题。

编辑 我刚刚修改了代码并添加了调用代码和预期的行为。我还添加了一个在方法 GetPerson 上可能不存在的属性

最佳答案

Code Contract 不提供这样的功能,C# 也不提供

代码契约仅要求调用者在被调用方法的开始处遵守某些约束。这些就是所谓的前提后置条件是被调用者的责任,它定义了被调用方法退出时程序的状态。

按契约设计是一种定义这些职责的方法,而不是告诉调用者应该如何处理由被调用方法引起的某些条件。

关于c#-4.0 - C# 4.0 中的代码契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278050/

相关文章:

functional-programming - 您将如何在 Clojure 或一般的函数式语言中实现按契约(Contract)设计?

c# - XAML 绑定(bind)到另一个元素的对立面

c# - 将矩阵的每一行( float )转换为向量

asp.net-mvc-3 - 如何读取 ASP.Net MVC 3 Web API 2.1 Controller 中的 POST 数据?

c# - 为什么隐式属性名称只能在匿名对象中使用?

c# - 从哪里开始代码契约(Contract)?

scheme - Racket Scheme 的 "design by contract"特征与 Eiffel 有何不同?

java - 返回 Null、异常、契约

code-contracts - 对按契约(Contract)设计或代码契约(Contract)的看法

msbuild - 有没有办法不让MsBuild用代码契约运行静态契约分析?