我有以下代码段:
public static string returnString()
{
string[] stringList = { "a" };
if (stringList.Count() != 1)
{
throw new Exception("Multiple values in list");
}
var returnValue = stringList.Single();
Contract.Assert(returnValue != null, "returnValue is null");
return returnValue;
}
CodeContract说:
CodeContracts:断言未经证实。你是否在静态检查器没有意识到的Single上做了一些假设?
根据我的理解,Single()
永远不会返回null - 它返回IEnumerable的唯一值或者抛出异常。我如何向代码分析器证明这一点?
答案 0 :(得分:11)
据我了解,
Single()
永远不会返回null
不正确 -
string[] a = new string[] {null};
bool check = (a.Single() == null); // true
它返回
IEnumerable
的唯一值或者抛出异常。
是正确的 - 所以如果集合只包含一个空值,那么Single
将返回null。