C#类型从我的类型转换为我的其他类型

时间:2019-07-09 06:56:18

标签: c#

我的代码获取一个包含所有内容的对象。并且根据不同的需求,需要将其强制转换为不同的个人类型。

class A
{
    public static explicit operator B (A value)
    {
        ....
        return new B();
    }
}

class B
{
    ...
}

public static T Get<T>(...)
{
    A a = new A();
    return (T)A;
}

var b = Get<B>(...); // cannot convert a type of A to B

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您无法执行此操作,因为编译器不知道(也无法告诉它)从AT的转换。您需要以某种方式约束T来表明这一点,而您却不能这样做-就像您不能约束T拥有+一样运算符等。(C#团队一直在考虑它的外观和实现方式,但是目前绝对不可用。)

您需要一种告诉编译器如何从A转换为T的方法-您可以向Get添加参数来告诉它:

public static T Get<T>(Func<A, T> converter)
{
    A a = new A();
    return converter(a);
}

然后您将用以下方式调用它:

var b = Get<B>(a => (B) a);

例如。

答案 1 :(得分:-1)

C#不支持鸭子类型,但是您可以将类A序列化为json字符串,然后将其反序列化为类B,所有具有完全相同名称和类型的属性(或通过使用JSON属性或JSON设置)将根据需要进入B类。