如果我有一个通用类:
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上。
答案 0 :(得分:3)
Collection<Foo> fooCollection = new Collection<Foo> { stuff = barCollection.stuff.Select(bar => (Foo)bar).ToArray() };
如果您愿意,可以将扩展方法添加到Collection:
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);