내부 목록을 반복자로 표시하여 호출하는 메서드가 foreach 루프로 제한되지는 않지만 IEnumerator.Current 및 IEnumerator.MoveNext()를 호출합니다.IEnumerator <string> .Current는 항상 null을 반환합니다.
public IEnumerator<string> Iterator
{
get
{
return m_list.GetEnumerator();
}
}
및
public IEnumerator<string> Iterator
{
get
{
for (int i = 0; i < m_list.Count; i++)
{
yield return m_list[i];
}
yield break;
}
}
모두는 다음 테스트에서 OutOfMemoryException을 갈 테스트 원인 : 나는 두 가지 방법을 시도 내가 디버거를 시도했을 때
[TestMethod]
public void TestMethod1()
{
var countryCode = "US";
var countryProvider= new CountryProvider(countryCode);
var filteredList = new List<string>();
while(countryProvider.Iterator.MoveNext())
{
filteredList.Add(countryProvider.Iterator.Current);
}
Assert.IsTrue(filteredEFIs.Count > 0);
}
내가 눈치 그 때마다 호출 MoveNext()로 이동하면 처음부터 계산이 시작되고 Iterator.Current는 항상 null입니다. 그래서 while
루프 Add
전화 모두 상태를 시작하는 (따라서 Current
이 null
이다) 새로운 반복자 리셋을 얻을 -
당신이 완전한 CountryProvider 클래스를 보여줄 수 : 다른 방법은 내 제공자 유형 부여, (아래 아래) 데코레이터 패턴을 사용하여 내부 열거를 래핑하는 IEnumerator를 장식 패턴을 통해
구현합니다입니까? –
예 ... 당신의 질문은 무엇인지 모르겠습니다. 'while'반복마다 새로운 iterator를 만드는 메서드를 호출하면 설명 된대로 정확하게 동작해야합니다. –
열거 자 대신'IEnumerable'을 반환하지 않는 이유는 무엇입니까? 구현이 동일하며 호출자가 훨씬 간단 해지고 작동합니다! –