无法将具有派生类的泛型类显式转换为具有基类的泛型类

时间:2018-12-02 19:24:37

标签: c# .net generics inheritance dynamic

我有一个通用类

class ImportFeed<T> where T : Product, new()
{
    public ImportFeed(string Filename) 
    {
    }
}

class Product {
}

class DerivedProduct : Product {
}

class DerivedProduct2 : DerivedProduct {
}

我遇到的问题是,我需要有条件地声明ImportFeed,例如:

switch (i) {
  case 1: ImportFeed<Product> feed = new ImportFeed<Product>("feed.xml")
  case 2: ImportFeed<DerivedProduct> feed = new ImportFeed<DerivedProduct("feed.xml")
  case 3: ImportFeed<DerivedProduct2> feed = new ImportFeed<DerivedProduct>"feed.xml")
}

但是,当我这样做时,变量的范围只是switch语句的范围。我还尝试在switch语句之前使用基类类型声明变量。

ImportFeed<Product> feed;

,然后为变量分配派生类型

例如

feed = new ImportFeed<DerivedProduct>"feed.xml")

但是我收到一个错误,即ImportFeed无法隐式转换为ImportFeed

我也尝试过在switch语句之外使用动态声明,但是稍后在代码中我无法在该对象上使用Lambda表达式。

请让我知道我要去哪里错了,我似乎已经退缩了。

0 个答案:

没有答案