요소를 나타내는 class X
이 있습니다. 클래스 A
, B
, C
및 D
은이 하위 클래스이며 요소에 추가 동작을 추가합니다.메서드는 서브 클래스 대신 슈퍼 클래스 목록을 반환합니다.
TypeA
, TypeB
, TypeC
및 TypeD
의 값을 가지고 있습니다.
내 현재 시나리오에는 X
유형의 컬렉션을 보유하고 method GetElementsByType(ElementType type)
이있는 class Y
이 있습니다.
이 메서드를 호출 할 때 형식에 따라 요소가있는 목록의 모든 항목 목록을 반환하고 싶습니다.
첫 번째 시도에서이 결과가 끝났지 만 수퍼 클래스와 하위 클래스 간의 변환 오류가 발생했습니다.
두 번째 시도에서 각 하위 클래스가 변환 오류를 피해야하는 공통 인터페이스를 구현하도록하여이 변환을 피하려고했습니다.
은 이걸로 끝났다 :
public interface IElement {
}
A : X, IElement
B : X, IElement
C : X, IElement
D : X, IElement
public List<IElement> GetElementsByType(ElementType type) {
switch (type) {
case ElementType.TypeA:
return new List<IElement>(Elementen.OfType<A>().ToList());
case ElementType.TypeB:
return new List<IElement>(Elementen.OfType<B>().ToList());
case ElementType.TypeC:
return new List<IElement>(Elementen.OfType<C>().ToList());
case ElementType.TypeD:
return new List<IElement>(Elementen.OfType<D>().ToList());
default:
throw new ArgumentException();
}
}
그러나
, 내가 눈치 곳에서이 방법, 예를 들어,
var result = obj.GetElementsByType(ElementType.TypeA).FirstOfDefault(a => a.PropX == variable)
를 호출 할 때 람다 표현식이 중 하나를 검색 할 수 없습니다 속성은 이지만 IElement 내부에 정의 된 모든 항목이 남습니다.
단일 메서드를 호출하고 매개 변수로 열거 형을 추가 한 다음 수퍼 클래스로 정의 된 Collection
의 하위 클래스 중 List
을 반환 할 수 있도록이 문제를 해결할 수 있습니까?
을 전혀'ElementType' 열거 필요한 이유는 무엇입니까? 목록 항목의 유형을 지정해야하므로'List myList = GetElementsByType (); '으로 충분하지 않습니까? 즉, 형식을 함수 매개 변수 대신 제네릭 형식 매개 변수로 만들 수 없습니까? – dasblinkenlight
함수 매개 변수에 대한 선택은 전적으로 형식 매개 변수에 대해 몰랐기 때문에 전적으로 이루어졌습니다. Kenneth와 당신의 지시를 따르고 유형 매개 변수를 사용하여 내 문제를 해결하고 있습니다. –