enum_in.Single()为1并抛出异常

时间:2012-07-24 13:13:15

标签: c# linq

我正在执行以下代码:

private static T FooException<T>(this IEnumerable<T> enum_in)    
{    
    try    
    {
        return enum_in.Single();
    }    
    catch(InvalidOperationException e)    
    {
        throw new XXXException(enum_in.Count(),  e   ...
    }    
}

获得InvalidOperationException。 如果我看一下enum.Count()那么其他只是一个项目。 这就是我不明白的地方。有没有枚举可以计数= 1的情况 并在InvalidOperationException中运行?

3 个答案:

答案 0 :(得分:1)

并非Linq的所有实现都支持所有操作。请尝试使用.First()

编辑:回答关于这不是真的评论。首先,我们不知道变量的具体类,所以即使你不知道任何不支持Single的实现,这并不意味着它不存在。

此外,我正在考虑LINQ-To-Entity实现。我的来源是Microsoft Press book for exam 70-516,第423页说明有一些不受支持的方法连接到分页:

  

分页分页操作返回序列中的单个特定元素。支持的方法是First,FirstOrDefault,Skip和Take。不受支持的方法是ElementAt,ElementAtOrDefault,Last,LastOrDefault, Single ,SingleOrDefault,SkipWhile和TakeWhile。

所有这些例子在该章中也使用了First而不是Single,这就是为什么我要特别注意这一点。令人感到有趣的是,这与评论中链接的msdn文档相矛盾。

答案 1 :(得分:0)

如果枚举为空或序列包含多个元素,则Single抛出InvalidOperationException。如果你打电话给SingleOrDefault(),你会得到什么?

答案 2 :(得分:0)

MSDN

InvalidOperationException

输入序列包含多个元素。

-OR -

输入序列为空。

所以我猜你或MSDN都错了。你也尝试过SingleOrDefault吗?也许它是空的。