c# - 为什么无法强制转换为派生类型
问题描述
考虑以下情况:
- 一个名为
Result
. Result
named的派生类RBTResult
。RBTResult
命名的派生类ResultNL
class Result {} class RBTResult : Result {} class ResultNL : RBTResult {}
有一个“结果”列表,其中包含 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
to T
( ResultNL
) 转换,因为它是派生类,但它不是。
这是为什么?如何使这项工作?
解决方案
推荐阅读
- django - 表中的 Django 数据未显示
- python - 如何在不重叠的情况下填充行之间的空格?
- bash - 杀死终端后是否可以执行bashscript?
- java - 如何使用密码处理生物特征?
- flutter - 无法创建 org.gradle.invocation.DefaultGradle 类型的实例
- java - 错误:无法找到或加载主类 AffineCipher
- java - 在更新 Spring Data Jpa 之后获取更新数据的问题
- php - 在 CentOS7 上检查 mod_python 库版本
- wordpress - Wordpress 忽略了 Elementor Pro 制作的自定义产品档案模板
- windows - Jenkins 构建失败,这是路径变量问题吗?