接受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类型?
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);