接受ObservableCollection <t>作为参数</t>的方法

时间:2014-03-20 09:25:33

标签: c# inheritance observablecollection

我有一些带有不同对象模型的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 个答案:

答案 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);