为什么不可能转换为派生类型

时间:2019-06-11 10:03:13

标签: c#

请考虑以下情况:

  • 名为Result的基类。
  • 派生为Result的类,名为RBTResult
  • 名为RBTResult的{​​{1}}的派生类

    ResultNL

有一个“结果”列表,其中包含RBTResult的具体实例。到目前为止一切顺利。

class Result {}

class RBTResult : Result {}

class ResultNL : RBTResult {}

我们将该列表传递给泛型函数 static void Main(string[] args) { List<Result> results = new List<Result> { new RBTResult(), new RBTResult() }; append<ResultNL>(results); } ,其中泛型类型append<T>()T

在追加之后,有一个循环将列表中的每个项目强制转换为泛型类型参数,但是每次都会抛出ResultNL

InvalidCastException

我想应该可以从 static void append<T>(List<Result> res) where T : Result { List<Result> l = new List<Result>(); foreach (var r in res) { try { _ = (T)r; l.Add(r); } catch (InvalidCastException e) { } } } 强制转换为RBTResultT),因为它是派生类,但不是。

那是为什么?如何进行这项工作?

0 个答案:

没有答案