Метод, принимающий 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);
Другие вопросы по тегам