簡體   English   中英

有沒有一種方法可以在一個自定義枚舉集合與另一個自定義枚舉集合之間進行轉換?

[英]Is there a way to convert between a collection of custom enum to a collection of another custom enum?

我們已經知道可以將一個枚舉轉換為另一種枚舉 ,因此可以進行以下編譯:

public class EnumTest
{
   enum Enum1 { Foo };
   enum Enum2 { Foo };
   void Test () 
   {
       System.Enum e = new Enum2();   // compiles
       Enum1 e1 = (Enum1)new Enum2(); // compiles with an explicit cast
   }
}

但這不能編譯:

public class EnumTest
{
   enum Enum1 { Foo };
   enum Enum2 { Foo };
   void Test () 
   {
       List<System.Enum> eList = new List<Enum2>();         // doesn't compile
       List<Enum1> e1List = (List<Enum1>)new List<Enum2>(); // doesn't compile
   }
}

這是一個協方差問題嗎? 如果沒有,是否有辦法使其起作用?

這不是方差問題,而是方差問題。 枚舉是值類型,值類型不支持協方差。 List<T>是一個class ,而不是interfacedelegate 協方差僅支持接口和委托。

您必須轉換/轉換列表中的元素:

List<Enum2> list2 = ...
List<System.Enum> eList = list2.Cast<System.Enum>().ToList();

但這當然會產生一個新列表。 eListlist2是不同的實例。

您不能像這樣Enum2Enum1Enum2是完全不同的東西。 您可以使用一些簡單的Linq來完成。 例如:

List<Enum2> eList = new List<Enum2>
{ 
    Enum2.Foo 
};

List<Enum1> e1List = eList
    .Select(x => (Enum1)x)
    .ToList();

請注意,這使用的是簡單的情況,但是您可能要使用鏈接的問題中的轉換函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM