我有
public enum Als { [StringValue("Beantwoord")] Beantwoord = 0, [StringValue("Niet beantwoord")] NietBeantwoord = 1, [StringValue("Geselecteerd")] Geselecteerd = 2, [StringValue("Niet geselecteerd")] NietGeselecteerd = 3, }
与
public class StringValueAttribute : Attribute { private string _value; public StringValueAttribute(string value) { _value = value; } public string Value { get { return _value; } } }
我想将我从组合框选择的项目中的值放入一个int:
int i = (int)(Als)Enum.Parse(typeof(Als), (string)cboAls.SelectedValue); //<- WRONG
这可能吗?如果可以,怎么办?(StringValue与从组合框中选择的值匹配)。
StringValue
这是一个帮助方法,可以为您指明正确的方向。
protected Als GetEnumByStringValueAttribute(string value) { Type enumType = typeof(Als); foreach (Enum val in Enum.GetValues(enumType)) { FieldInfo fi = enumType.GetField(val.ToString()); StringValueAttribute[] attributes = (StringValueAttribute[])fi.GetCustomAttributes( typeof(StringValueAttribute), false); StringValueAttribute attr = attributes[0]; if (attr.Value == value) { return (Als)val; } } throw new ArgumentException("The value '" + value + "' is not supported."); }
要调用它,只需执行以下操作:
Als result = this.GetEnumByStringValueAttribute<Als>(ComboBox.SelectedValue);
尽管这可能不是最好的解决方案,但它Als可能与之相关,您可能想使此代码可重复使用。您可能想要从我的解决方案中删除代码以返回属性值,然后Enum.Parse按您在问题中所使用的方式进行操作。
Als
Enum.Parse