我正在执行以下代码:
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
中运行?
答案 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吗?也许它是空的。