C# 方法接受可观察采集<;T>;作为参数

C# 方法接受可观察采集<;T>;作为参数,c#,inheritance,observablecollection,C#,Inheritance,Observablecollection,我有一些具有不同对象模型的可观察集合,它们都继承自同一个基本模型。例如: class Food { } class Pizza : Food { } class Rice : Food { } class Spaghetti : Food { } 以及每一个的可观察收集: ObservableCollection<Pizza> pizzaOC; ObservableCollection<Rice> riceOC; ObservableCollection<Spag

我有一些具有不同对象模型的可观察集合,它们都继承自同一个基本模型。例如:

class Food { }
class Pizza : Food { }
class Rice : Food { }
class Spaghetti : Food { }
以及每一个的可观察收集:

ObservableCollection<Pizza> pizzaOC;
ObservableCollection<Rice> riceOC;
ObservableCollection<Spaghetti> spOC;
是否有任何方法可以调用单个方法,但传递不同类型的ObservableCollection?还有,有没有办法在方法中找出传递了哪种OC类型?

private bool CheckFood(ObservableCollection foodItems)其中T:Food
private bool CheckFood<T>(ObservableCollection<T> foodItems) where T: Food
{
   ...
}
{ ... }
您可以使用类似于
typeof(T)
的方法来确定传递给方法的食物类型,但最好将逻辑的责任转移到类本身

private bool CheckFood(observeCollection foodItems),其中T:food
{
...
}
您可以使用类似于
typeof(T)
的方法来确定传递给方法的食物类型,但最好将逻辑的责任转移到类本身

private bool CheckFood(observeCollection foodItems),其中T:food
{
...
}
您可以使用类似于
typeof(T)
的方法来确定传递给方法的食物类型,但最好将逻辑的责任转移到类本身

private bool CheckFood(observeCollection foodItems),其中T:food
{
...
}

您可以使用类似于
typeof(T)
的方法来确定传递给方法的食物类型,但最好将逻辑的责任转移到类本身

如果您的方法不依赖于显式
observedcollection
的参数,您可以始终:


如果您的方法不依赖于显式
ObservableCollection
的参数,则始终可以:


如果您的方法不依赖于显式
ObservableCollection
的参数,则始终可以:


如果您的方法不依赖于显式
ObservableCollection
的参数,则始终可以:


这绝对是最好的方法。如果您需要知道方法中对象的类型,那么最好将此方法设置为虚拟方法,并在继承自“FoodViewModel”的类中使用特定行为覆盖它。您可以通过:typeof(T)或使用集合或其对象上的“is”或“as”操作符来检查食物对象的类型。感谢这项工作,我会尽快接受的。第二个问题:是否也可以在方法中找到哪种类型是T?这肯定是最好的方法。如果您需要知道方法中对象的类型,那么最好将此方法设置为虚拟方法,并在继承自“FoodViewModel”的类中使用特定行为覆盖它。您可以通过:typeof(T)或使用集合或其对象上的“is”或“as”操作符来检查食物对象的类型。感谢这项工作,我会尽快接受的。第二个问题:是否也可以在方法中找到哪种类型是T?这肯定是最好的方法。如果您需要知道方法中对象的类型,那么最好将此方法设置为虚拟方法,并在继承自“FoodViewModel”的类中使用特定行为覆盖它。您可以通过:typeof(T)或使用集合或其对象上的“is”或“as”操作符来检查食物对象的类型。感谢这项工作,我会尽快接受的。第二个问题:是否也可以在方法中找到哪种类型是T?这肯定是最好的方法。如果您需要知道方法中对象的类型,那么最好将此方法设置为虚拟方法,并在继承自“FoodViewModel”的类中使用特定行为覆盖它。您可以通过:typeof(T)或使用集合或其对象上的“is”或“as”操作符来检查食物对象的类型。感谢这项工作,我会尽快接受的。第二个问题:是否也可以在方法中找到T的类型?
CheckFood(pizzaOC);
CheckFood(riceOC);
//...
private bool CheckFood<T>(ObservableCollection<T> foodItems) where T: Food
{
   ...
}
public bool CheckFood<TCollection, TItem>(TCollection collection)
    where TCollection : ICollection<TItem>, INotifyCollectionChanged
    where TItem : Food
{
    // something
}
var type = typeof(TItem);