簡體   English   中英

如何返回包含枚舉值的字符串[]

[英]How to return a string[] containing values of an Enum

我想創建一個動態GUI,其中將枚舉的所有選項都列為按鈕。 因此,我需要一種將Enum類型傳遞給方法並獲取枚舉類型可以是的所有選項的字符串數組的方法。

例如,在文件Foo.cs中給出一個Enum聲明:

public Enum Fruits {
    Apple,
    Orange,
    Peach
};

public class Foo { ... }

我想要這個返回:

{ "Apple", "Orange", "Peach" }

我經歷了一些代碼排列。 現在,我有以下內容,但出現錯誤“ 找不到類型或名稱空間名稱'enumeratedType'

public static string[] EnumToStringArray (System.Type enumeratedType) {
    int         enumSize    =   sizeof(enumeratedType);
    string[]    enumStrings =   new string[enumSize];

    for (int i = 0 ; i < enumSize ; i++) {
        enumStrings[i]  =   enumeratedType.getValues()[i].toString();
    }

    return enumStrings;
}

我想做的事可能嗎? 我已經嘗試過根據此問題中的信息進行多次完全重寫,是否在C#枚舉中使用了句點值(編譯時枚舉的大小)? 但我無法正常工作。

string[] names = Enum.GetNames(typeof(Fruits));

您可以使用類似

public static IEnumerable<string> EnumToStringArray(Type enumeratedType) {
    if (!enumeratedType.IsEnum)
        throw new ArgumentException("Must be an Enum", "enumeratedType");

    return Enum.GetNames(enumeratedType);
}

但是即使那樣也沒有Enum.GetNames(...) ,因為如果給定類型不是Enum ,則Enum.GetNames(...)本身會引發ArgumentException (感謝@亞歷山大·巴爾特)。 因此,您仍然不需要自己的函數。 正如其他人已經提到的那樣,只需Enum.GetNames(typeof(Fruits))完成工作。

您似乎誤解了sizeof關鍵字的含義。 當它與非托管內存中的其他值對齊時,它返回值類型“占用”的字節數(每個字節等於8位)。

如果您不使用unsafe上下文(如指針),則sizeof不會有用。

對於您的Fruits類型,由於基礎iteger類型為Int32 ,因此sizeof(Fruits)返回4 (因為如果沒有另外指定,則為默認值)。 Int32需要32位,因此sizeof返回4 是否有1、2、10或4294967296不同的水果都沒關系。

請注意,一個枚舉可以有多個指向相同值的名稱,例如:

public enum Fruits {
  Apple,
  Orange,
  Peach,
  ChineseApple = Orange,
}

在此示例中,枚舉包含四個命名常量,但是其中兩個“映射到”相同的值。 在這種情況下, Enum.GetNames(typeof(Fruits))會給您全部四個名稱。

但是Enum.GetValues(typeof(Fruit))將為您提供四個Fruit 的列表,其中兩個相同。 您無法預先知道兩個相同的值將顯示為Orange還是ChineseApple ,因此,如果枚舉具有這樣的重復項,則不要使用此方法。

暫無
暫無

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

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