代码如下
类可以隐式转换泛型类,这是没问题的
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);
}
}
直接转换肯定不行,不过可以考虑这样写。
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
这样就可以实现隐式转换,希望可以帮到你。如果解决不了,不妨把你的场景说出来,大多数时候语言和框架的设计者比我们聪明很多,往往是我们自己在项目中的某个设计没搞好才去找语言或者框架的某个特性。
就是webapi 返回同一result 但是底层用的是result<T> 具体的类型,return的时候想让它自己转换,我用的.net core 3.2,你这个方法,我试一下,感觉可以的样子
可以,能用
A a=(A)b;
List<A> lista=listb.select(x=>(A)b).ToList()
你这个不是隐式转换
貌似没办法直接隐式转换
只能写的时候手动转一下了,本来想偷下懒。