我有一些带有不同对象模型的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类型已经通过?
答案 0 :(得分:2)
private bool CheckFood<T>(ObservableCollection<T> foodItems) where T: Food
{
...
}
您可以通过类似typeof(T)
之类的方式确定传递给方法的食物类型,但最好将逻辑责任转移到类本身
答案 1 :(得分:1)
如果您的方法不依赖于明确ObservableCollection<T>
的参数,您可以始终code to the interface:
public bool CheckFood<TCollection, TItem>(TCollection collection)
where TCollection : ICollection<TItem>, INotifyCollectionChanged
where TItem : Food
{
// something
}
这意味着如果您想使用自定义&#34; Observable Collection&#34;你不需要依赖它继承ObservableCollection
。
此外,为了找出传递给方法的类型,您可以在方法中调用以下内容:
var type = typeof(TItem);