using System;

class X {}
class Y: X {}

class Wrapper<T> where T : X {}

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Wrapper<Y> y = new();
        
        Wrapper<X> x = y; // Error here
    }
}

错误为error CS0029: Cannot implicitly convert type 'Wrapper<Y>' to 'Wrapper<X>'

这里我想把Wrapper<Y>转换成Wrapper<X>.

我怎么能这样做呢?

推荐答案

您可以通过使用协变接口来使其工作.而且您也不需要WHERE子句.

class X { }
class Y : X { }

interface IWrapper<out T> {
    
}

class Wrapper<T> : IWrapper<T> 
{
    
}

public class HelloWorld
{
    public static void Main(string[] args)
    {
        IWrapper<Y> y = new Wrapper<Y>();

        IWrapper<X> x = y;
    }
}

Csharp相关问答推荐

我如何才能获得被嘲笑班级的私有成员?

如何在Visual Studio代码中更改大括号模式{},用于C#语言

如何使用XmlSerializer反序列化字符串数组?

Polly使用泛型重试和重试包装函数

在实时数据库中匹配两个玩家的问题

如何在没有前缀和可选后缀的情况下获取Razor Page Handler方法名称?

如何在WPF的树视图中显示一个对象的两个或多个属性,其中只有一个是分层项?

方法从数据表中只 Select 一个条件?

如何使用MoQ模拟Resources GroupCollection?

如何捕获对ASP.NET核心应用程序的所有请求并将其发送到一个页面

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

Lambda表达式如何与隐式强制转换一起工作?

同一组件的多个实例触发相同的事件处理程序

Azure函数-在外部启动类中生成配置时出错

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

如何使用.NET Aspire从Blazor应用程序与GRPC API通信?

将C#类导入到PowerShell

用MongoDB c#驱动程序删除和返回嵌套数组中的文档

使用本地公共PEM文件加密字符串,使用Azure KayVault中的私钥解密

使用ImmutableList时,DynamicData未按预期工作