IEnumerable에는 Count 메서드가 없습니다.


81

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

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


같은 문제가있었습니다. 어떤 이유로 이것을 마우스 오른쪽 버튼으로 클릭하고 "해결 ..."을 선택하여 수정할 수 없습니다. (
micahhoover

한숨! System.Linq가 포함되어 있지만 여전히이 오류가 발생합니다. (오류 메시지는 첫 번째 인수를 "System.Linq.IQueryable"로 지정합니다.)
Hot Licks 2014

답변:


158

다음을 추가합니다.

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

이 참조에서 오류가 발생하면 프로젝트의 대상 프레임 워크 (프로젝트 속성, 응용 프로그램 탭)가 .NET Framework 3.5 또는 4로 설정되어 있는지 확인합니다. 확장 메서드는 2.0 이전 버전에서 작동하지 않습니다.
willvv apr

1
System.Linq를 사용했습니다. 하지만 문제가 해결되지 않습니다. System.Core 어셈블리에 대한 참조가 있는지 어떻게 확인할 수 있습니까?
aherlambang aherlambang 2010

아 신경 끄시 고, 내가 System.data.linq과의 System.Linq 사이의 서로 다른이 무엇인지 ... 그것을 고정
aherlambang

@Alexander : 완전히 다른 네임 스페이스입니다. System.Data.LinqLINQ to SQL에만 해당됩니다.
Jon Skeet

1
@skyfoot : 아니요, 정말 그렇지 않습니다. 4. 그렇지 않다고 생각되면 문제를 보여주는 짧지 만 완전한 프로그램으로 질문을 게시하십시오.
Jon Skeet 2011 년

7

Any()또는 Count()Linq의 메서드는 제네릭 유형에 대해서만 작동합니다.

IEnumerable<T>

IEnumerable유형이없는 단순 이있는 경우

IEnumerable<object> 

대신.


2

IEnumeration라는 메서드가 없습니다 Count(). 그것은 일종의 "요소의 시퀀스"일뿐입니다. 예를 들어 List명시 적으로 요소 수가 필요한 경우 사용하십시오 . Linq를 사용하는 경우 확장 메서드 Count()는 실제로 호출 할 때마다 요소 수를 다시 계산할 수 있다는 점을 명심 하십시오.


-1

어때 :

public bool IsValid
{
    get { return (GetRuleViolations().Cast<RuleViolation>().Count() == 0); }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.