首页 新闻 搜索 专区 学院

C# 泛型类的隐式转换,类可以隐式转换泛型类,那如何把泛型类隐式转换类?

0
悬赏园豆:10 [已解决问题] 解决于 2022-09-23 11:36

代码如下
类可以隐式转换泛型类,这是没问题的
public class Class2<T>
{
public Class2(Class1 i)
{
a = i.a;
b = (T)i.b;
}

    public int a { get; set; }

    public T b { get; set; }

    public static implicit operator Class2<T>(Class1 i)
    {
        return new Class2<T>(i);
    }
}

但是 泛型类想要隐式转换类会提示<T> 找不到 T
public class Class1
{
public Class1(Class2<T> i)
{
a = i.a;
b = i.b;
}

    public int a { get; set; }

    public object b { get; set; }

    public static implicit operator Class1(Class2<T> i)
    {
        return new Class1(i);
    }
}
这瓜超甜的主页 这瓜超甜 | 初学一级 | 园豆:169
提问于:2022-09-17 15:30
< >
分享
最佳答案
1

直接转换肯定不行,不过可以考虑这样写。

public abstract class Base
{
    public int a { get; set; }
    public abstract object? GetBAsObject();
}

public class Class2<T> : Base
{
    public Class2(int a, T b)
    {
        this.a = a;
        this.b = b;
    }

    public Class2(Class1 i)
    {
        a = i.a;
        if(i.b is not null)
        {
            b = (T)i.b;
        }
    }

    public T? b { get; set; }
    public override object? GetBAsObject()
    {
        return b;
    }

    public static implicit operator Class2<T>(Class1 i)
    {
        return new Class2<T>(i);
    }
}

public class Class1
{
    public Class1(Base i)
    {
        a = i.a;
        b = i.GetBAsObject();
    }

    public int a { get; set; }

    public object? b { get; set; }

    public static implicit operator Class1(Base i)
    {
        return new Class1(i);
    }
}

测试代码如下:

Class2<string> c2 = new(10, "abc");
Class1 c1 = c2;
Console.WriteLine(c1.a);

环境:Windows64位,.NET6

这样就可以实现隐式转换,希望可以帮到你。如果解决不了,不妨把你的场景说出来,大多数时候语言和框架的设计者比我们聪明很多,往往是我们自己在项目中的某个设计没搞好才去找语言或者框架的某个特性。

收获园豆:10
AsakusaRinne | 菜鸟二级 |园豆:214 | 2022-09-21 11:50

就是webapi 返回同一result 但是底层用的是result<T> 具体的类型,return的时候想让它自己转换,我用的.net core 3.2,你这个方法,我试一下,感觉可以的样子

这瓜超甜 | 园豆:169 (初学一级) | 2022-09-23 11:08

可以,能用

这瓜超甜 | 园豆:169 (初学一级) | 2022-09-23 11:36
其他回答(2)
0

A a=(A)b;
List<A> lista=listb.select(x=>(A)b).ToList()

ensleep | 园豆:1563 (小虾三级) | 2022-09-18 17:14

你这个不是隐式转换

支持(0) 反对(0) 这瓜超甜 | 园豆:169 (初学一级) | 2022-09-19 14:21
0

貌似没办法直接隐式转换

WmW | 园豆:280 (菜鸟二级) | 2022-09-19 10:51

只能写的时候手动转一下了,本来想偷下懒。

支持(0) 反对(0) 这瓜超甜 | 园豆:169 (初学一级) | 2022-09-19 14:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册