集合的隐式转换

时间:2011-04-04 23:34:11

标签: c# operator-overloading ienumerable

如果我在两种类型之间定义一个显式转换运算符,那么不应该遵循我可以在这些类型的集合之间显式转换吗?即

    public static explicit operator FooEntity(Entity entity)
    {
        FooEntity e = new FooEntity(entity);
        return e; 
    }

因此我可以做到这一点,

    IEnumerable<Entity> entities = GetEntities();
    IEnumerable<FooEntity> fooEntities = (IEnumerable<FooEntity>)entities;

    IEnumerable<FooEntity> fooEntities = entities as IEnumerable<FooEntity>

这可能以某种方式或我是否还必须创建自己的运算符以在集合之间进行转换?我收到一个运行时错误,指出无法进行转换。

感谢。

1 个答案:

答案 0 :(得分:3)

C#在集合分配时不支持泛型类型方差的这种方法,你必须使用类似的东西:

IEnumerable<FooEntity> fooEntities = entities.Select(e => (FooEntity)e);