首页 > 解决方案 > 为什么无法强制转换为派生类型

问题描述

考虑以下情况:

有一个“结果”列表,其中包含 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) { }
        }
    }

我会说应该可以从RBTResultto T( ResultNL) 转换,因为它是派生类,但它不是。

这是为什么?如何使这项工作?

标签: c#

解决方案


推荐阅读