2 개의 ObservableCollection이 있는데, class1과 class2 유형입니다.일반 ObservableCollection을 메소드에 전달하고 반복합니다.
private ObservableCollection<Class1> cOne; // collection of objects of type Class1
private ObservableCollection<Class1> cTwo; // collection of objects of type Class2
이제 아래의 방법으로이 컬렉션을 반복하고 개체의 멤버에 액세스하려고합니다.
public void MyMethod<T>(){
var listOfLayers = new ObservableCollection<T>();
if (typeof(T) == typeof(Class1))
{
listOfLayers = (T) cOne;
}
else{
listOfLayers = (T) cTwo;
}
foreach (var entry in listOfLayers){
WL entry.someprop;
}
}
하지만 형식 변환 시마다 오류가 발생합니다.
Error CS0030 Cannot convert type 'System.Collections.ObjectModel.ObservableCollection' to 'T'
두 가지 방법 모두 기본적으로 별도의 데이터베이스 테이블에서 동일한 작업을 수행하기 때문에 유형에 따라 두 가지 방법을 만들지 않았습니다. 따라서 둘 다 중복 코드를 포함하게됩니다.
멋진 답변을 해주신 Florian에게 감사드립니다. 그러나 여전히 "System.Collections.ObjectModel.ObservableCollection '를'System.Collections.ObjectModel.ObservableCollection '\t"으로 변경하는 것과 같은 오류가 발생합니다. 나는 두 개의 분리 된 메소드를 생성하는 것이 더 좋다고 생각하지만, 이제는 더 많은 코드 또는 더 적은 코드를 포함 할 것이다. –
else 분기에서이 예외가 발생하지 않았습니까? 그렇다면 'typeof (T)! = typeof (IT.Landbase 조정)'일 수 있습니까? –
기본 유형으로 캐스트 할 수 없다는 점에 유의하십시오 ('T'가 'AdjustIT.Landbase'의 상위 클래스 인 경우 캐스트가 실패합니다). 이유는 다음과 같습니다. https://stackoverflow.com/a/43378505/2259391 –