우리는 매우 오래된 코드 기반을 가지고 있습니다 (실제로는 끔찍한 품질이 아닙니다). 닷넷이 시험판으로 발매 될 때까지 거슬러 올라간다. 의심 스럽지만 이상한 컨벤션의 원인이다.IEnumerator 속성을 IList <T> 또는 유사하게 리팩터링하는 데 도움이되는 도구가 있습니까?
어쨌든 .Net 1.1 지원을 중단하기 시작했고 일을 generics로 변환하고 Linq 및 모든 재미있는 것을 사용하여 건재한 하루를 보내고 있습니다. 우리의 코드베이스에서 가장 짜증나는 패턴 중 하나는 비록 우리가
private ArrayList mylist;
public IEnumerator MyList
{
get
{
if(mylist==null)
return new EmptyEnumerator.Enumerator;
return mylist.GetEnumerator();
}
}
이 패턴처럼 뭔가를해야하다이있는 IEnumerator는 IEnumerable을 구현하지 않기 때문에 단순히 foreach(var item in MyList)
일에서 우리를 방지하기 때문에 특히 끔찍한입니다. 대신에 우리는 다음과 같은 일을 수행해야합니다
IEnumerator enumerator=MyList;
while(enumerator.MoveNext())
{
object item=enumerator.Current;
}
그래서, 리팩토링에 대한, 물론 우리가 ReadOnlyCollection<T>
또는 IList<T>
또는 이와 유사한 같은 것을 사용하고 싶습니다. 그러나 이렇게하려면, 우리가해야 할 MyList
마다 하나의 참조를 업데이트 할 수 있습니다
IEnumerator enumerator=MyList;
어떤 경우에는
IEnumerator enumerator=MyList.GetEnumerator();
에, 우리는 하나 개의 속성에 백 참조를 통해 할 수 있습니다. 이것을 쉽게 할 수있는 도구가 있습니까? 우리는 최근에 Resharper를 가지고 있지만 (이 문제는 아니지만 일반적으로 사용하기 위해),이 유형의 시나리오를 다루지는 않습니다. 당신이해야 할 것처럼 들리
'GetEnumerator() '를 수동으로 호출하는 대신 * 사용 *을 수정하지 않는 이유는 무엇입니까? 어쨌든 대부분의 사람들이'foreach' 루프가 될 것이라고 예상 할 수 있습니다. –
모든 .cs 파일을 읽고 패턴을 찾거나 바꿀 수있는 빠른 스크립트를 작성하거나 정규 표현식을 사용할 수있을 정도로 일관성이 있습니까? –
@JonSkeet 우리는 사랑하고 싶지만 작업에 헌신 할 달이 없다는 것을 알았습니다. :) 이제 우리의 계획은 근본 원인을 수정하여 새로운 코드를 작성하고 이전 코드를 수정할 수있게하는 것입니다. 그것을 통해 올 – Earlz