2011-04-04 162 views
3

如果我在两种类型之间定义了一个显式转换运算符,是否应该遵循我可以在这些类型的集合之间进行显式转换? IE浏览器。集合的隐式转换

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> 

这是可能以某种方式或者我还可以建立自己的运营商集合之间的转换?我得到一个运行时错误,说转换是不可能的。

谢谢。

回答

3

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

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

我一定要超载演员<>?因为我在Entity和FooEntity之间使用隐式(而非显式)操作符来尝试此操作,但仍然出现运行时错误,表示无法从实体转换为FooEntity。 – 2011-04-04 23:42:47

+0

不,如果您为集合中的项目类型创建了明确的转换重载,那么这就是您所需要的。 – 2011-04-04 23:44:10

+0

哇,事实证明你是对的 - 我的错误。我只是跑了一个快速测试,看起来你必须改用'Select()'。 – 2011-04-04 23:49:10