0

我正在执行以下代码:

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()那么正是一个项目。那是我不明白的。是否存在枚举可以使用 count = 1 并运行的情况InvalidOperationException

4

3 回答 3

1

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

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

此外,我正在考虑 LINQ-To-Entity 实现。我的资料来源是Microsoft Press for Exam 70-516,它在第 423 页上指出有一些不受支持的方法与分页有关:

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

在该章中,所有示例也使用 First 而不是 Single,这就是我特别注意这一点的原因。有趣的是,这与评论中链接的 msdn 文档相矛盾。

于 2012-07-24T13:17:47.447 回答
0

如果可枚举为空或序列包含多个元素,则 Single 会引发 InvalidOperationException。如果你调用 SingleOrDefault(),你会得到什么?

于 2012-07-24T13:19:30.973 回答
0

MSDN

无效操作异常

输入序列包含多个元素。

-或者-

输入序列为空。

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

于 2012-07-24T13:21:09.813 回答