我有以下c#代码:
myClaimsIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;CodeContract知道myClaimsIdentity从来不是空的。但是它抱怨FindFirst(string)方法可能返回null:
警告CodeContracts:可能对空引用调用方法。您期望System.Security.Claims.ClaimsIdentity.FindFirst(System.String)返回非空值吗?
我确实期待这一点,但我如何才能告诉CodeChecker呢?当然,我不能更改FindFirst(string),因为它来自外部库。
发布于 2015-05-12 07:20:57
简单的方法是:
var nameIdentifier = myClaimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
Contract.Assume(nameIdentifier != null);
nameIdentifier.Value;代码契约不会试图证明Assume条件,而是在验证其他需求时使用它。
可能可以为具有适当的Ensures后置条件的外部代码创建契约引用程序集。代码契约团队为BCL类型执行此操作。但我不知道该怎么做。
https://stackoverflow.com/questions/30173070
复制相似问题