다음과 같은 방법이 있습니다.
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations(){
//code here
}
.Count()
위에서 할 때 빨간색 밑줄이 그어진 이유는 무엇 입니까?
다음과 같은 오류가 발생했습니다.
오류 1 ‘System.Collections.Generic.IEnumerable’에 ‘Count’에 대한 정의가 포함되어 있지 않으며 ‘System.Collections.Generic.IEnumerable’유형의 첫 번째 인수를 허용하는 확장 메서드 ‘Count’를 찾을 수 없습니다. 지시문 또는 어셈블리 참조를 사용합니까?) c : \ users \ a \ documents \ visual studio 2010 \ Projects \ NerdDinner \ NerdDinner \ Models \ Dinner.cs 15 47 NerdDinner
답변
다음을 추가합니다.
using System.Linq;
소스 맨 위에 System.Core 어셈블리에 대한 참조가 있는지 확인합니다.
Count()
System.Linq.Enumerable
LINQ to Objects, System.Linq.Queryable
LINQ to SQL 및 기타 out-of-process 공급자 에 대해 정적 클래스에서 제공하는 확장 메서드 입니다.
편집 : 사실, Count()
여기서 사용하는 것은 상대적으로 비효율적입니다 (적어도 LINQ to Objects에서는). 당신이 알고 싶은 것은 요소 가 있는지 아닌지입니다 . 이 경우 Any()
더 적합합니다.
public bool IsValid
{
get { return !GetRuleViolations().Any(); }
}
답변
Any()
또는 Count()
Linq의 메서드는 제네릭 유형에 대해서만 작동합니다.
IEnumerable<T>
IEnumerable
유형이없는 단순 이있는 경우
IEnumerable<object>
대신.
답변
IEnumeration
라는 메서드가 없습니다 Count()
. 그것은 일종의 “요소의 시퀀스”일뿐입니다. 예를 들어 List
명시 적으로 요소 수가 필요한 경우 사용하십시오 . Linq를 사용하는 경우 확장 메서드 Count()
는 실제로 호출 할 때마다 요소 수를 다시 계산할 수 있다는 점을 명심 하십시오.
답변
어때 :
public bool IsValid
{
get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}