请考虑以下情况:
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) { }
}
}
强制转换为RBTResult
(T
),因为它是派生类,但不是。
那是为什么?如何进行这项工作?