C# 代码契约如何知道ToString重写不应该';不返回空值?

C# 代码契约如何知道ToString重写不应该';不返回空值?,c#,code-contracts,C#,Code Contracts,我使用的是微软的C#代码契约扩展。当我使用返回null的重写ToString实现编写一个类时,它正确地识别了问题: 我认为这是因为Microsoft在内部使用代码契约,并且他们添加了一个契约。确保调用对象.ToString。但是,当我查看时,我没有看到任何合同(我确实看到了其他合同,但没有看到我正在寻找的合同)。代码契约如何确定ToString不应返回null?这是系统对象的代码契约内部定义。如您所见,他们使用此约束定义了ToString(): Contract.Ensures(Contrac

我使用的是微软的C#代码契约扩展。当我使用返回null的重写ToString实现编写一个类时,它正确地识别了问题:


我认为这是因为Microsoft在内部使用代码契约,并且他们添加了一个契约。确保调用对象.ToString。但是,当我查看时,我没有看到任何合同(我确实看到了其他合同,但没有看到我正在寻找的合同)。代码契约如何确定ToString不应返回null?

这是系统对象的代码契约内部定义。如您所见,他们使用此约束定义了
ToString()

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

为了回答您的问题,代码契约知道它不是空的,因为有内部契约定义。

为了提供更多信息:代码契约不在正式程序集中,因此您在referencesource.microsoft.com上看不到它们。代码契约团队自己定义了所有代码契约,并在单独的契约引用程序集中提供它们,这些程序集只包含契约而不包含真正的源代码。@cremor谢谢!仅供参考,我确实在ReferenceSource(例如in)上看到了很多合同,但我想这些合同可以在.NET core或代码合同中指定,具体取决于谁编写的。