Code Contracts如何知道ToString覆盖不应该返回null?

时间:2015-10-27 02:09:23

标签: c# code-contracts

我在C#中使用Microsoft的Code Contracts扩展程序。当我编写一个带有重写的ToString实现的类,它返回null时,它正确地识别了问题:

CodeContracts string cannot be null

我认为这是因为Microsoft在内部使用了代码合同,并且他们向Contract.Ensures添加了Object.ToString次调用。但是,当我查看Object.ToString source code时,我看不到任何合同(我确实看到了其他合同,但不是我正在寻找的合同)。 Code Contracts如何确定ToString不应该返回null?

1 个答案:

答案 0 :(得分:6)

这是System.Object(link)的代码合约内部定义。如您所见,他们已使用此约束定义ToString()

Contract.Ensures(Contract.Result<string>() != null);

为了回答您的问题,代码合同因内部合约定义而知道它不为空。