Метод, принимающий ObservableCollection<T> в качестве параметра
У меня есть несколько ObservableCollections с различными объектными моделями, все они наследуются от одной базовой модели. Например:
class Food { }
class Pizza : Food { }
class Rice : Food { }
class Spaghetti : Food { }
и ObservableCollection для каждого:
ObservableCollection<Pizza> pizzaOC;
ObservableCollection<Rice> riceOC;
ObservableCollection<Spaghetti> spOC;
Тогда у меня есть метод, который имеет ObservableCollection<Food>
параметр, вот так:
private bool CheckFood(ObservableCollection<Food> foodItems)
{
// stuff here
}
Проблема возникает, когда я пытаюсь сделать звонки:
CheckFood(pizzaOC);
CheckFood(riceOC);
//...
Есть ли способ, которым я могу вызвать один метод, но передавая различные типы ObservableCollections? А также, есть ли способ узнать в методе, какой тип OC был передан?
2 ответа
private bool CheckFood<T>(ObservableCollection<T> foodItems) where T: Food
{
...
}
Вы можете определить тип пищи, передаваемой в метод, с помощью чего-то вроде typeof(T)
но лучше перекладывать ответственность за логику на сам класс
Если ваш метод не основан на явном аргументе ObservableCollection<T>
Вы всегда можете написать код для интерфейса:
public bool CheckFood<TCollection, TItem>(TCollection collection)
where TCollection : ICollection<TItem>, INotifyCollectionChanged
where TItem : Food
{
// something
}
Это означает, что если вы хотите использовать пользовательскую "Наблюдаемую коллекцию", вам не нужно полагаться на нее, наследуя от ObservableCollection
,
Кроме того, чтобы узнать, какой тип был передан методу, вы можете вызвать следующее внутри метода:
var type = typeof(TItem);