[英]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.