c# - 如何使泛型类的类型可转换?

标签 c# generics

如果我有一个泛型类:

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() };

如果您愿意,您可以向 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);

关于c# - 如何使泛型类的类型可转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609901/

相关文章:

c# - 同时调用多个函数

c# - 从 winforms 应用程序到 Azure SQL 的安全连接字符串

c# - StructureMap 3 中开放泛型的装饰器拦截

c# - 使用对通用对象的引用作为参数

javascript - typescript 如何将泛型分配给泛型变量字段

c# - NHibernate hql 元组结果

c# - 等到进程结束

c# - 从数组中删除重复项

带通配符的java泛型

c# - 从非泛型类的泛型方法派生泛型方法