Я заранее прошу прощения, если подобный вопрос был задан ранее. Если да, то, пожалуйста, направьте меня к нему, так как я не смог найти подходящий ответ.
Ситуация, с которой я сталкиваюсь, требует некоторых сложных махинаций для приобретения набора объектов, которые мне нужно передать в качестве параметров моему методу. Тем не менее, у меня возникают проблемы при попытке привести этот набор объектов удобным способом для моего метода. Это упрощенная версия кода:
public void OnMouseClick(object sender, MouseButtonEventArgs e) {
var value = (sender as (DataGridCell)).[...].GetValue(context, null);
var objects = value as ObservableCollection<IViewModelObject>;
myMethod(objects);
}
public void myMethod(IEnumerable<IViewModelObject> objects) {
doStuff(objects);
}
public interface IViewModelObject { }
public class ViewModelObject1 : IViewModelObject { }
public class ViewModelObject2 : IViewModelObject { }
В настоящее время объекты всегда равны нулю, поскольку приведение не выполняется. Тем не менее, бросок успешен, если я сделаю
var objects = value as ObservableCollection<ViewModelObject1>;
Но это делает меня неспособным использовать интерфейс в моем методе, и бог знает, что у меня есть много классов, реализующих этот интерфейс, и я хотел бы избежать написания операторов для всех них.
Обратите внимание, что myMethod не нужно знать, какой класс реализации используется, и я, вероятно, мог бы использовать IEnumerable, и это все равно будет работать. К сожалению, актёрский состав тоже не удался.
Полагаю, компилятору не нравится, когда дочерние классы приводятся к их базе, но я чувствую, что есть еще способ добиться аналогичного эффекта. Есть идеи?