我有以下一段c#代码:
myClaimsIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;
CodeContract知道myClaimsIdentity永远不会为null。但它抱怨FindFirst(string)
方法可能返回null:
警告CodeContracts:可能在空引用上调用方法。您是否期望System.Security.Claims.ClaimsIdentity.FindFirst(System.String)返回非null?
我确实希望如此,但我怎么能告诉CodeChecker?当然,我无法更改FindFirst(string)
,因为它来自外部库。
答案 0 :(得分:2)
简单的方法是:
var nameIdentifier = myClaimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
Contract.Assume(nameIdentifier != null);
nameIdentifier.Value;
代码合同不会尝试证明Assume
条件,但会在证明其他要求时使用它。
可能可以为具有适当Ensures
后置条件的外部代码创建合同引用程序集。代码合同团队为BCL类型执行此操作。但我不知道该怎么做。