簡體   English   中英

如何從字符串表示形式創建枚舉? C#

[英]how do I create an enum from a string representation? c#

我試圖從用戶控件傳回屬於枚舉的字符串列表,如下所示:

<bni:products id="bnProducts" runat="server" ProductsList="First, Second, Third"  />

然后在代碼behid中執行以下操作:

public enum MS 
    {
        First = 1,
        Second,
        Third
    };
    private MS[] _ProductList;
    public MS[] ProductsList
    {
        get
        {
            return _ProductList;
        }
        set
        {
            _ProductList = how_to_turn_string_to_enum_list;
        }
    }

我的問題是我不知道如何將字符串轉換為枚舉列表,所以“ how_to_turn_string_to_enum_list”應該是什么? 還是您知道在用戶控件中使用枚舉的更好方法? 我真的很希望能夠傳遞一個整潔的列表

這是一個簡短的解決方案,但沒有涵蓋一些非常重要的內容,例如本地化和無效輸入。

private static MS[] ConvertStringToEnumArray(string text)
{
    string[] values = text.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
    return Array.ConvertAll(values, value => (MS)Enum.Parse(typeof(MS), value));
}

您需要查看System.Enum.Parse方法。

Enum.Parse是解析字符串以獲取枚舉的規范方法:

MS ms = (MS) Enum.Parse(typeof(MS), "First");

但您需要自行分割字符串。

但是,您的屬性當前為MS[]類型MS[]value變量將不是字符串。 我懷疑您需要將您的屬性設置為字符串,然后在其中進行解析,並將結果存儲在MS[] 例如:

private MS[] products;

public string ProductsList
{
    get
    {
        return string.Join(", ", Array.ConvertAll(products, x => x.ToString()));
    }
    set
    {
        string[] names = value.Split(',');
        products = names.Select(name => (MS) Enum.Parse(typeof(MS), name.Trim()))
                        .ToArray();
    }
}

我不知道您是否需要直接公開數組本身-這取決於您要執行的操作。

string[] stringValues = inputValue.Split(',');

_ProductList = new MS[stringValues.Length];

for (int i=0;i< stringValues.Length;i++)
  _ProductList[i] = (MS) Enum.Parse(typeof(MS), stringValues[i].Trim());

(更新了我的代碼,因為我誤讀了您的代碼)

用[Flags]屬性標記您的枚舉,然后組合標志而不是枚舉值數組。

暫無
暫無

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

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