2012-09-13 4 views
0

내 조건을 충족시키는 문자열 []에 지정된 항목 수를 가져와야합니다. 그래서, 나는 Predicate를 시도했고 같은 것을 사용하여 조건을 정의했다. 하지만 내 코드가 작동하지 않습니다. 아무도 나를 도울 수 있습니까?술어를 사용하여 단어 수 계산

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); 

실행하면 컴파일 타임 오류가 발생합니다. 아래를 참조하십시오 :

은 '문자열 []' '백작'과 최고의 확장 메서드 오버로드 'System.Func System.Linq.Enumerable.Count (System.Collections.Generic.IEnumerable,에 대한 정의가 포함되어 있지 않습니다) '일부 잘못된 인수가

+2

작업이 있습니다 또는 원래의 코드를 사용하여 단지 Predicate<string>Func<string, bool>에 변경 왜 작동하지 않는지에 관한 내용입니다. – CharlesB

+1

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+2

람다'books.Count (book => book.Length> 5)'를 사용할 수있는 것과 같은 anon 델리게이트를 사용하는 것보다 읽기 쉽습니다. –

답변

4

LINQ Count() 방법으로 시도 할 수 있습니다. 이 경우 메서드는 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); 
+0

Perfect Thanks !!! – user972255

2

이 시도 :

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

람다없이이 일을 할 때 익명 메소드 (당신의 조건)하는 방법을 정의

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

사용을 :

var result = books.Count(IsThisALongBookTitle); 
+0

술어를 사용하여 어떻게 할 수 있는지 알려주십시오. – user972255

+0

이것은 실제로 술어입니다. 그러나 lambda와 익명 메소드없이 이것이 작동하는 방법을 보여주기 위해 내 게시물을 편집했습니다. – Spontifixus

+0

글쎄 사실 사실 이것은'Func '이지만'술어 '과 같은 메소드 서명을 가지고 있습니다 ... – Spontifixus

0

당신은 매개 변수로 Predicate을지지 않습니다

books.Count(a = > a.Length > 5); 
1

이 두 가지 문제

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>' 

이 솔루션은 detai를 추가하십시오

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)); 
+0

도움 주셔서 감사합니다. 또한 첫 번째는 작동하지 않지만 다른 두 개는 정상적으로 작동합니다. 'System.Array'에는 'AsEnumberable'에 대한 정의가없고 'System.Array'유형의 첫 번째 인수를 허용하는 확장 메서드 'AsEnumberable'이 없습니다 (이 경우 사용 지시문이나 어셈블리가 누락 되었습니까? 참조?) – user972255

+0

당신은'System.Core' 어셈블리를 참조하고 적절한 네임 스페이스를 사용 했습니까? 새로운 목록 { "c", "b", "a"}. OrderBy (s => s);'코드가 컴파일되지 않으면 사용법과 참조 된 어셈블리를 확인해야합니다. –

관련 문제