C# 泛型强制转换

标签 c# casting

我有一个无法解决的选角问题:

在 ClassA 初始化函数中,我想传递 'this' 作为参数,但编译器无法从 ClassA<T, U> 进行强制转换至ClassA<ClassB<U>, U>知道它们是相同的 ( where T : ClassB<U> )。

public class ClassA<T, U> : MonoBehaviour where T : ClassB<U>
{
    public void initialize()
    {
        T item =...
        item.Initialize(this); // Cannot implicitly convert from ClassA<T, U> to ClassA<ClassB<U>, U>.
    }
}

public class ClassB<T> : MonoBehaviour
{
    public virtual void Initialize(ClassA<ClassB<T>, T> mgr, T data)
    {
        ...
    }
}

谢谢。

最佳答案

考虑:Elephant : Animal ;这并不意味着List<Elephant> : List<Animal> ,并且您不能转换 List<Elephant>List<Animal>出于多种原因(包括:在转换为 Add(monkey) 后,这会让您 List<Elephant>List<Animal> ,因为 Monkey : Animal )。从概念上讲,这里是完全相同的。

关于C# 泛型强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59715613/

相关文章:

c# - 强制选项卡到扩展的 .net 控件中的下一个控件

java - 创建具有定义类型的 Hashmap 与对象相比有性能优势吗?

java - 显式类型转换、派生类数组

c# - 将 SQL Server json 属性与代码优先 EF 一起使用

c# - NServiceBus - 获取队列上的所有待处理消息

Java - 带返回值的异步方法

c++ - 将指针转换为 uint64_t

c# - 解析动态枚举

c# - 如何通过禁用 Name Mangling 来调用实例方法

c# - 防止 visual studio 将 setter 方法限制为内部