Я пытаюсь создать общий интерфейс, который может быть реализован классом, который должен иметь возможность возвращать ЛИБО Список типов Class1 ИЛИ Class2. Я не смог заставить это работать, потому что мне нужно передать универсальный тип IRules, и если я передам ClassAbstract, я столкнусь с проблемой ниже (очень краткий общий пример того, с чем я действительно имею дело), где одно из свойствэто только один из производных типов, а не базовый тип.
Я не уверен, как я могу заставить это работать так, как я хочу - в основном в этом разделе я могу проверить тип списка и затем указать, что делать, но проблема в том, что, потому что я передаюClassAbstract как общий параметр, который тоже не будет работать ... есть ли способ заставить это работать должным образом без указания типа интерфейса, потому что я на самом деле не знаю, будет ли это List of Class1 или ListClass2 и в зависимости от того, откуда он вызывается? Я, очевидно, мог бы продублировать код и просто использовать один раз метод для каждого типа класса, но это много кода, и я не думаю, что это должно быть так сложно сделать, что я хочу сделать, но, возможно, я ошибаюсь ...
public interface IRules<T> {
List<T>GetAdditionalPropRules(List<T> list1);
List<T>SetAdditionalPropRules(List<T> list1);
}
public ClassAbstract {
public string NAME {get;set;}
public string AGE {get;set;}
}
public class Class1: ClassAbstract {
public string JOB {get;set;}
}
public class Class2: ClassAbstract {
}
public class Rules MyProperties: IRules<ClassAbstract>{ **<--- I Want this to be able to accept either Class1 or Class2**
public List<ClassAbstract> SetAdditionalPropRules(List<ClassAbstract> myList) {
foreach(dynamic item in myList) {
if(item.NAME == "Joe") {
myList.Add(new ClassAbstract {
AGE = 30,
JOB = "Tester" **<--- ISSUE RIGHT HERE -- ClassAbstract Does not have property JOB**
}
}
}
}
}