确保IEnumerable不为空的合同

zer*_*kms 15 .net c# static-analysis code-contracts

给定的代码

static public int Q()
{
    return Enumerable.Range(0, 100)
        .Select(i => i)
        .First();
}
Run Code Online (Sandbox Code Playgroud)

发出以下警告:

warning : CodeContracts: requires unproven: Any(source)
Run Code Online (Sandbox Code Playgroud)

如果我删除.Select()它,它就会消失.

但目前还不清楚我究竟是什么,我需要.Ensure这样的cccheck很满意.

jlv*_*ero 1

你能用这段代码避免警告吗?

var res = Enumerable.Range(0, 100).Select(i => i).Take(1); //execute one query with TOP1 and store in memory
Contract.Assume(res.Any()); //or res.Count() > 0 //query already in memory
return res.First(); //query already in memory
Run Code Online (Sandbox Code Playgroud)