, 나는 역 은어 List
다음어떻게 foreach에서 목록을 뒤집을 수 있습니까?
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
난 항상 오류 얻을 : 무슨 문제와 그 해결 방법에
Type void is not enumerable
를?
, 나는 역 은어 List
다음어떻게 foreach에서 목록을 뒤집을 수 있습니까?
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
난 항상 오류 얻을 : 무슨 문제와 그 해결 방법에
Type void is not enumerable
를?
List<T>.Reverse
돌아 가기 무엇이든 - 그것은 목록의 위치를 바꿉니다. 기존 목록을 돌연변이없이 반대의 순서를 반환 LINQ version of Reverse
하지만 를 사용하려면
, 당신은 사용할 수 있습니다 아마도 더 명확하게
foreach (IEnumerable<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
또는를 :
foreach (List<Foo> row in Items)
{
// We want to use the LINQ to Objects non-invasive
// Reverse method, not List<T>.Reverse
foreach (Foo item in Enumerable.Reverse(row))
{
...
}
}
foreach (List<Foo> row in Items)
{
row.Reverse()
foreach (Foo item in row)
{
...
}
}
Reverse
목록 내의 순서 변경 - 항목의 순서가 반대 인 새 목록을 반환하지 않습니다.
List<T>.Reverse()
은 입니다. 내부는입니다. 즉 원래 목록이 변경됩니다. 명시 적으로 Enumerable.Reverse
를 호출하면 원래 목록을 변경하지 않으려면
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}
, 당신은 것이다 :
그래서, 당신은 다음과 같이 사용할 것
foreach (List<Foo> row in Items)
{
foreach (Foo item in Enumerable.Reverse(row))
{
...
}
}
이유를 들어 확장 메서드 구문에서 Enumerable.Reverse
을 사용할 수 없으면 확장 메서드는 인스턴스 메서드를 숨기거나 재정의하지 않으며 List<T>
에는 이미 Reverse
메서드가 있습니다.
원래 목록을 강조하기 위해 +1이 * 변경 *되어 있으므로 프로그램의 다른 부분에서 * 역전되어 있습니다. –
List<T>.Reverse
모두를 반환하지 않습니다!
foreach (IEnumerable<Foo> row in Items)
{
row.Reverse();
foreach(Foo item in row)
{
}
}
List<T>.Reverse()
는이 자리에서 역, 그것은 새 목록을 반환하지 않습니다이다. orininal 목록이 변경됩니다.
Reverses the order of the elements in the entire
List<T>
.
첫 번째 foreach 문에는 row.Reverse();
을 사용해야합니다. 처럼; 여기
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
//
}
}
는 DEMO입니다. 당신이 당신의 orininal 목록을 변경하지 않으려면
대신의 Enumerable.Reverse 방법을 사용할 수 있습니다.
Inverts the order of the elements in a sequence.
foreach (Foo item in Enumerable.Reverse(row))
{
//
}
여기 Enumerable.Reverse<T>
방법을 이용하여 동일한 DEMO이다.
List.Reverse()는 void 서명이있는 메소드입니다.
다음과 같이 루프를 변경할 수 있습니다.
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}
이 게시물에 따르면, 그들이 .NET의 최신 버전에 역방향 방법의 서명을 변경 한 것 : 공공 정적는 IEnumerable 역 (이 IEnumerable을 소스); –
hbulens