如何使泛型类在类型上可转换

本文关键字:可转换 类型 何使 泛型类 | 更新日期: 2023-09-27 17:56:37

如果我有一个泛型类:

class Collection < G >  {
    public G[] stuff
}

我还有另外两个类,其中一个可以转换为另一个(尽管比这更复杂!

class Foo {
    public Foo( int i ) { myInt = i; }
    public int myInt;
}
class Bar {
    public Bar( float f ) { myFloat = f; }
    public float myFloat;
    public static implicit operator Foo( Bar bar ) {
        return new Foo( Math.Ceil(bar.myFloat) );
    }
}

我收集了两者:

Collection < G >  fooCollection = new Collection < Foo > ();
Collection < G >  barCollection = new Collection < Bar > ();

我希望能够做这样的事情:

Collection < G > fooCollection2 = barCollection.Convert( typeof(Foo) );

我该怎么做呢?

编辑:这是针对Unity的,我相信它仍然在.NET 2.0上。

如何使泛型类在类型上可转换

Collection<Foo> fooCollection = new Collection<Foo> { stuff = barCollection.stuff.Select(bar => (Foo)bar).ToArray() };

如果需要,可以将扩展方法添加到"集合"中:

public static Collection<TResult> Select<TResult, T>(this Collection<T> c, Func<T, TResult> projection)
{
   return new Collection<TResult> { stuff = c.stuff.Select(x => projection(x)).ToArray() };
}

然后你可以这样称呼它:

Collection<Foo> fooCollection2 = barCollection.Select(bar => (Foo)bar);