gpt4 book ai didi

c# - 没有对多个通用约束的隐式转换

转载 作者:行者123 更新时间:2023-11-30 18:46:25 24 4
gpt4 key购买 nike

使用泛型构建一段 C# 代码我生成的代码如下所示:

public class Test<U,V,W>
where U : V
where V : W
{
public W Cast(U argument)
{
return argument;
}
}

return 行无法编译(在 mono 3.2.8.0 下:“无法将类型 U 隐式转换为 W”),尽管很明显 U 必须是 W 的子类(从技术上讲,可能涉及值类型,但即使所有三个泛型参数都被限制为引用类型,上述也会失败)。如果 U 被限制为直接从 W 派生,则一切正常。

上面的代码修复起来很简单(向 V 插入强制转换就足够了,这当然总是成功)。不过,我有两个问题:最重要的是,为什么代码无法按原样编译?欢迎链接到 C# 规范的相关片段(如果有的话)!其次,将(看似多余的)转换为 V 会在运行时引入(无用的)类型检查吗?

最佳答案

我的猜测是 Mono 不理解如果 U:V 和 V:W,那么 U:W。也尝试加入该约束?

编辑:我看到您在回答中提到了这一点(我错过了)。既然如此,我会说这是 Mono 中的一个错误。只需放入约束并完成它?也许提交错误。

关于c# - 没有对多个通用约束的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com