2010-02-24 3 views
24

나는 다음을 수행 할 수없는 이유가 있습니까 :왜 foreach (DataTable.Rows의 var 항목)를 수행 할 수 없습니까?

foreach (var Item in DataTable.Rows) { 

오히려 다른 데이터 유형에처럼 나는 이것이 가능하다고 생각했을 것이다

foreach (DataRow Item in DataTable.Rows) { 

을 수행하는 것보다. 예를 들면 : 내가 처음 foreach 루프를 시도 할 때

foreach (var Employee in Staff) { // string[] Staff etc... 

, 나는 오류 CS0021을 얻을 형식 '객체'의 표현에 []와 색인을 적용 할 수 없습니다.

컴파일러가 그 이유를 알 수없는 이유는 무엇입니까 .Rows는 DataRow 컬렉션을 반환합니까?

답변

25

Rows 효과적으로 IEnumerable (DataRowCollection)를 반환, 그래서 컴파일러는 var의 형태로서 object을 선택할 수 있습니다. var을 사용하려면 Rows.Cast<DataRow>을 사용하십시오.

CastEnumerable에 정의되어 있으므로 System.Linq를 포함해야합니다.

+0

제네릭 전에 datatables 있었는? –

+0

@Arnis : 당연히 DataTable은 1.0 이후였습니다. –

+0

그래서 - 그것이 진짜 이유라고 생각합니다. 설명을 위해 타이 존. :) –

20

브라이언은 그 이유에 대해 절대적으로 맞다, 그러나 그것을 피하는 간단한 방법이있다 : 사용 :

foreach (var row in DataTable.AsEnumerable()) 
{ 
    ... 
} 
+0

그런 멋진 솔루션을 주셔서 감사합니다 :) 나는 수락 대답을 브라이언의 것으로 지켰지 만 당신을 사용할 것입니다. 그것은 Enumerables에 대해 조금 더 읽었을 때입니다 ... – GateKiller

+8

이 문제에 대한 실제 해결책은이 인스턴스에서 var를 사용하지 않을 것이라고 말하고 싶습니다 ... – cjk

+1

@ck : 동의하지만, 'AsEnumerable'에 대해 알고있을 가치가 있습니다. 다른 LINQ 메서드와 연결하기 위해 –