如何将泛型类转换为泛型对象类?

问题描述 投票:0回答:1

假设您有 2 个课程:

public abstract class Foo<T> {
    public abstract T DoSomething();
}

public class FooInt : Foo<int> {
    public override int DoSomething() {
        return 42;
    }
}

我想将 FooInt 转换为 Foo。 而且很难重构代码,因为我有一个 List> 存储所有 Foo 类实例。 我确实想保留 FooInt 的覆盖。


我试过这个:

public static implicit operator Foo<object>(Foo<T> field) { return (Foo<object>)field; }

但是我遇到了溢出异常,因为它调用了自己。然后我尝试了这个:

public static implicit operator Foo<object>(Foo<T> field) { return (field as Foo<object>)!; }

但是返回了 null。我尝试过这个:

public static implicit operator Foo<object>(Foo<T> field) { return (Foo<object>)(object)field;}

但这给出了无效的强制转换异常。我也尝试过移除演员表,但这也不起作用。

感谢您的帮助,0xDED。

@Fildor 评论,像这样

public interface IFoo
{
}

public abstract class Foo<T> : IFoo
{
    public abstract T DoSomething();
}

public class FooInt : Foo<int>
{
    public override int DoSomething()
    {
        return 42;
    }
}
public class FooDouble : Foo<double>
{
    public override double DoSomething()
    {
        return 42.0;
    }
}


List<IFoo> list = new List<IFoo>()
   {
       new FooInt(),
       new FooDouble()
   };

c# generics inheritance casting
1个回答
0
投票

@Fildor 评论,像这样

public interface IFoo
{
}

public abstract class Foo<T> : IFoo
{
    public abstract T DoSomething();
}

public class FooInt : Foo<int>
{
    public override int DoSomething()
    {
        return 42;
    }
}
public class FooDouble : Foo<double>
{
    public override double DoSomething()
    {
        return 42.0;
    }
}


List<IFoo> list = new List<IFoo>()
   {
       new FooInt(),
       new FooDouble()
   };
© www.soinside.com 2019 - 2024. All rights reserved.