2011-04-04 159 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