Ya (Mehrdad en Yanıt başına) bir sözlük kullanarak özel bir mapper oluşturmak: Eğer mevcut yönteme sadık istiyorsanız
enum Operation{ Equals, NotEquals, LessThan, GreaterThan };
var dict = new Dictionary<string, Operation> {
{ "Equals", Operation.Equals },
{ "Not Equals", Operation.NotEquals },
{ "Less Than", Operation.LessThan },
{ "Greater Than", Operation.GreaterThan }
};
var op = dict[str];
Alternatif olarak, (yaptığımı karşı tavsiye) yapabilirsiniz veya bir TypeConverter uygulayın.
Özel TypeConverter'ınız " " -> "_"
'u (ya da tam tersi) değiştirebilir ya da numaralandırmayı yansıtabilir ve öğenin görünen metnini belirlemek için bir öznitelik kullanabilir.
enum Operation
{
[DisplayName("Equals")]
Equals,
[DisplayName("Not Equals")]
Not_Equals,
[DisplayName("Less Than")]
Less_Than,
[DisplayName("Greater Than")]
Greater_Than
};
public class OperationTypeConverter : TypeConverter
{
private static Dictionary<string, Operation> operationMap;
static OperationTypeConverter()
{
BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.GetField
| BindingFlags.Public;
operationMap = enumType.GetFields(bindingFlags).ToDictionary(
c => GetDisplayName(c)
);
}
private static string GetDisplayName(FieldInfo field, Type enumType)
{
DisplayNameAttribute attr = (DisplayNameAttribute)Attribute.GetCustomAttribute(typeof(DisplayNameAttribute));
return (attr != null) ? attr.DisplayName : field.Name;
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
string stringValue = value as string;
if (stringValue != null)
{
Operation operation;
if (operationMap.TryGetValue(stringValue, out operation))
{
return operation;
}
else
{
throw new ArgumentException("Cannot convert '" + stringValue + "' to Operation");
}
}
}
}
Bu uygulama çeşitli şekillerde geliştirilebilir:
şiddetle ilgili: [nasıl yapılır set-space-on-enum] (http://stackoverflow.com/questions/1101872/how-to-set-space-on-enum) – nawfal
Sözlüğe ek olarak aşağıdakine yaklaştığınızda, meta verileri (görüntü dizileri gibi) bir numarayla ilişkilendirmek için öznitelikleri kullanabilirsiniz. [C# enums in ins ve out] 'a göz atın (http://www.codeducky.org/ins-outs-c-enums/). – ChaseMedallion