我想构建一个从基本ObservableCollection
中获取的ObservableCollection
,以便根据Collection包含的子项类型执行某些操作。
public class DbListBase : ObservableCollection<T>
{
public DbListBase()
{
if (TypeOf(T) == Machine) {Do This}
if (TypeOf(T) == Person) {Do That}
}
}
但是,<T>
带有下划线,并且找不到错误消息类型或命名空间T.
我试图通过使用所有其他类继承的基类来解决它,就像这样。
public class DbListBase : ObservableCollection<ModelBase>
{
public DbListBase()
{
// How would I check for the Type of child?
}
}
但是创建DbListBase
的实例不会让我这样做:
DbListBase MachineList = new DbListBase<Machine>();
如何使第一种方法DbListBase : ObservableCollection<T>
起作用?
答案 0 :(得分:1)
您的错误的直接原因是:您的班级也必须是通用的:
public class DbListBase<T> : ObservableCollection<T>
// here ^^^^
但我不喜欢泛型类型的概念,它在泛型参数上执行取决于的不同内容。 Generic 应该是type- 独立的。
所以我建议为你需要的每种类型制作不同的派生词:
public class DbListBaseForType1 : ObservableCollection<Type1> // Type1 as generic argument for the base class
{
// special behaviour for Type1
}
public class DbListBaseForType2 : ObservableCollection<Type2> // Type2 as generic argument for the base class
{
// special behaviour for Type1
}