接受ObservableCollection的方法<;T>;作为参数

本文关键字:gt 参数 lt ObservableCollection 方法 接受 | 更新日期: 2023-09-27 17:51:01

我有几个具有不同对象模型的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类型?

接受ObservableCollection的方法<;T>;作为参数

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
}

这意味着,如果您想使用自定义的"Observable Collection",则不需要依赖它从ObservableCollection继承。

此外,为了找出传递给方法的类型,您可以在方法中调用以下内容:

var type = typeof(TItem);