[英]Given an object, which is an array of enum values, how can I get an Enum[] without knowing the enum type
如何從包含某個枚舉類型數組的對象類型變量轉換為Enum []? 換一種說法:
// Somewhere in the code we have: public enum MyEnum {This,That};
// Somewhere else in the code we have: public enum TheirEnum {What,Ever};
// In other parts of the code we have additional enum types
// Now, given:
object enumArrayOfSomeType=...; // Maybe it's of type MyEnum[] or TheirEnum[] or
// SomeOtherEnum[]
// I want to say
Enum[] someEnumArray=enumArrayOfSomeType as Enum[];
不幸的是,所呈現的代碼總是在someEnumArray中產生空值。
有沒有辦法做到這一點?
更新 :
我想我期待陣列協方差開始,但也許我期待太多(即陣列協方差變得瘋狂)。
此外,由於克里斯·辛克萊在評論接受的答案指出陣列的協方差僅適用於引用類型的枚舉肯定不是。 (請參閱: MSDN中的.NET數組協方差規則 。)
我懷疑你必須創建一個新數組並轉換每個元素,因為MyEnum[]
不是Enum[]
。 一個簡單的LINQ查詢可以做到這一點:
Enum[] someEnumArray = ((IEnumerable)enumArrayOfSomeType).Cast<Enum>().ToArray();
編輯:根據您的意見,如果您只想迭代一次並避免創建數組,您可以拋棄ToArray()
調用並將其視為延遲的IEnumerable<Enum>
:
IEnumerable<Enum> someEnumArray = ((IEnumerable)enumArrayOfSomeType).Cast<Enum>();
所以它本質上只是迭代元素並一次拋出一個元素。
EDITx2:從編輯過的問題到為什么數組協方差沒有起作用,這是因為它僅適用於枚舉不是的引用類型 。 從MSDN 12.5陣列協方差 :
對於任何兩個引用類型 A和B,如果從A到B存在隱式引用轉換(第6.1.4節)或顯式引用轉換(第6.2.3節),則數組類型A也存在相同的引用轉換[ R]到陣列類型B [R]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.