0

条件を満たすstring[]で指定されたアイテムの数を取得する必要があります。そこで、述語を試し、同じものを使用して条件を定義しました。しかし、私のコードは機能していません。誰か助けてくれませんか?

string[] books = new string[] { "Java", "SQL", "OOPS Concepts", "DotNet Basics"};

Predicate<string> longBooks = delegate(string book) { return book.Length > 5; };
int numberOfBooksWithLongNames = books.Count(longBooks);

これを実行すると、コンパイル時エラーが表示されます。下記を参照してください:

「string[]」には「Count」の定義が含まれておらず、最適な拡張メソッドのオーバーロード「System.Linq.Enumerable.Count(System.Collections.Generic.IEnumerable、System.Func)」に無効な引数がいくつかあります

4

4 に答える 4

4

LINQメソッドはパラメーターとしてをCount()取りません。Predicateあなたの場合、メソッドはタイプのデリゲートを取りますFunc<string, bool>。したがって、コードを修正する方法はいくつかあります。最も簡単な方法は、おそらく他の人が提案したことを実行してラムダを使用することです。または、元のコードを使用して、次のように変更Predicate<string>Func<string, bool>ます。

string[] books = new string[] { "Java", "SQL", "OOPS Concepts", "DotNet Basics"};

Func<string, bool> longBooks = delegate(string book) { return book.Length > 5; };
int numberOfBooksWithLongNames = books.Count(longBooks);
于 2012-09-13T14:34:16.797 に答える
4

これを試して:

var result = books.Count(x => x.Length > 5);

ラムダなしでこれを行う場合、匿名メソッドはメソッド(述語)を定義します:

public bool HasLongTitle(string book)
{
    return book.Length > 5;
}

それを使用してください:

var result = books.Count(HasLongTitle);
于 2012-09-13T14:27:09.827 に答える
1

2つの問題があります

string[]' does not contain a definition for 'Count' and the best extension method
 overload 'System.Linq.Enumerable.Count<TSource>
(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,bool>)' 
has some invalid arguments

Argument 2: cannot convert from 'System.Predicate<string>' to 
'System.Func<string,bool>'

これらのソリューションは機能します

int numberOfBooksWithLongNames = books.AsEnumberable().Count(s => longBooks(s));
int numberOfBooksWithLongNames = new List<string>(books).Count(s => longBooks(s));
int numberOfBooksWithLongNames = books.Count(s => longBooks(s));
于 2012-09-13T14:36:07.180 に答える
0

あなたはで試すことができます

books.Count(a = > a.Length > 5);
于 2012-09-13T14:28:07.340 に答える