如何向CodeContracts证明IEnumerable <t> .Single()永远不会返回null?

时间:2015-05-18 15:57:45

标签: c# code-contracts

我有以下代码段:

    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的唯一值或者抛出异常。我如何向代码分析器证明这一点?

1 个答案:

答案 0 :(得分:11)

  

据我了解,Single()永远不会返回null

不正确 -

string[] a = new string[] {null};

bool check = (a.Single() == null);  // true
  

它返回IEnumerable的唯一值或者抛出异常。

是正确的 - 所以如果集合只包含一个空值,那么Single将返回null。