创建Generic List derrived形式Observable Collection

时间:2017-12-16 17:22:30

标签: c#

我想构建一个从基本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>起作用?

1 个答案:

答案 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
}