我正在try 获得与此Kotlin代码等效的C#代码:

class Baz<E>(val value: E)

class Foo<T>(val toto: Baz<T>) {

    class Bar<U>(toto: Baz<U>) : Foo<U>(toto) {

        val tata: U = toto.value

    }

}

这是因为Bar中的UFoo中的T相同,因此与Baz中的E相同.

请记住,Bar是一个嵌套类,而不是一个内部类,所以如果Bar没有泛型U,它就不可能有toto的类型.

然后我try 用C#复制它,如下所示:

public class Baz<E> {
    public E Value;

    public Baz(E value) {
        Value = value;
    }
}

public class Foo<T> {
    public T Toto;

    public Foo(T toto) {
        Toto = toto;
    }

    public class Bar<U> : Foo<U> {
        public U Tata;

        public Bar(U toto) : base(toto) {
            Tata = toto.Value;
        }
    }
}

但是,在此实现中,我得到错误Cannot convert source type 'U' to target type 'T'.

为什么它不起作用,我怎么才能修复它呢?

推荐答案

然而,在此实现中,我得到错误:无法将源类型‘U’转换为目标类型‘T’.

只需删除U,因为Bar<U>Foo<T>中已经比T更通用:

这是为我整理的:

public class Foo<T>
{
    public readonly T Toto;

    public Foo( T toto )
    {
        this.Toto = toto;
    }

    public class Bar : Foo<T>
    {
        public readonly T Tata;

        public Bar( T toto )
            : base( toto )
        {
            this.Tata = toto;
        }
    }
}

如果您希望允许Bar拥有自己的类型参数,即绑定到T,这也是可行的(但实用性有问题,IMO):

public class Foo<T>
{
    public readonly T Toto;

    public Foo( T toto )
    {
        this.Toto = toto;
    }

    public class Bar<U> : Foo<T>
        where U : T
    {
        public readonly U Tata;

        public Bar( U toto )
            : base( toto )
        {
            this.Tata = toto;
        }
    }
}

请注意,要使用Bar<U>,您需要将其限定为Foo<T>.Bar<U>:

Foo<T> foo = new Foo<T>.Bar<U>( ... );

...所以当你T == U岁的时候,你会得到这样的结果:

Foo<String> foo = new Foo<String>.Bar<String>( "lolwut" );

Csharp相关问答推荐

是否可以将gltf转换为字节数组,然后将字节数组转换回文件?

C#将参数传递给具有变化引用的变量

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

如何使用C#Interop EXCEL创建度量衡

限制特定REST API不被访问,但部署代码

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

Quartz调度程序不调用作业(job)类

静态对象构造顺序

如何在页面重新加载后保持菜单切换状态

在ASP.NET Core Web API项目中通过中间件修改`Request.Path`不会更改使用的控制器/操作

UWP应用程序try 将打包的本机.exe文件加载为C#程序集

DbContext-传递自定义配置选项

DateTime ToString()未以指定格式打印

如何在不复制或使用输出的情况下定义项目依赖

未在Windows上运行的Maui项目

Blazor服务器项目中的Blazor/.NET 8/Web API不工作

如何在Polly重试策略成功之前将HttpClient请求排队?

错误:此版本的Visual Studio无法打开以下项目

无法将.Net Framework 4.8.1升级到.Net 7

根据运行时值获取泛型类型的字典