[c#] IEnumerable에는 Count 메서드가 없습니다.

다음과 같은 방법이 있습니다.

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.EnumerableLINQ to Objects, System.Linq.QueryableLINQ 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); }
}


답변