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()そこにはちょうど1つのアイテムがあります。それは私が理解していないことです。列挙型が count = 1 で実行中の場合はありInvalidOperationExceptionますか?

4

3 に答える 3

1

Linq のすべての実装がすべての操作をサポートしているわけではありません。.First()代わりに使用してみてください。

編集:これが真実ではないというコメントに答えるために。まず、変数の具体的なクラスがわからないため、Single がサポートされていない実装を知らなくても、それが存在しないわけではありません。

さらに、LINQ-To-Entity の実装を考えていました。私の情報源はMicrosoft Press の試験 70-516の本で、423 ページには、ページングに関連するサポートされていない方法がいくつかあると記載されています。

ページングページング操作は、シーケンスから単一の特定の要素を返します。サポートされているメソッドは、First、FirstOrDefault、Skip、および Take です。サポートされていないメソッドは、ElementAt、ElementAtOrDefault、Last、LastOrDefault、Single、SingleOrDefault、SkipWhile、および TakeWhile です。

その章では、すべての例で Single ではなく First も使用されているため、これに特に注意を払いました。これがコメントにリンクされている 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 に答える