我想为我的应用程序中的所有可能枚举创建一个动态双向转换器。
我不想为每个枚举创建一个转换器,我想创建一个转换器,它提供从枚举到字节的转换,从字节转换为枚举,反之亦然。
我怎样才能到达那里?我的方法已经是双向的,但在代码中需要静态强制转换(MyEnum):
public class MyEnumConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) {
return (MyEnum)value;
}
public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) {
return (byte)value;
}
public override object ProvideValue(System.IServiceProvider serviceProvider) {
return this;
}
}
答案 0 :(得分:1)
尝试这些扩展方法,它将从枚举转换为数据类型(int,byte,..),并从数据类型(int,byte,..)转换为枚举,反之亦然。
public static T ToEnumValue<T, E>(this E enumType)
{
return (T)Enum.ToObject(typeof(E), enumType);
}
public static E ToEnumType<T, E>(this T enumString)
{
return (E)Enum.Parse(typeof(E), enumString.ToString());
}
例如:要使用上述方法,请使用枚举
public enum EmployeeType
{
Permanent = 0,
Contract = 1,
}
int value = EmployeeType.Contract.ToEnumValue<int, EmployeeType>(); // 1
EmployeeType employeeType = value.ToEnumType<int, EmployeeType>(); // Contract
答案 1 :(得分:1)
我相信你可以通过两种不同的方式做到这一点。
选项1:利用转换方法上的targetType
参数。当您需要转换为枚举时,targetType
是枚举类型。您可以使用System.Enum
类中的一种静态方法进行转换。
选项2:在您的xaml中,使用ConverterParameter传入要转换为的枚举类型:
Converter={local:MyConverter, ConverterParameter={x:Type MyEnumType}}
如果你走这条路线,那么类型将在转换方法的parameter
参数中。同样,System.Enum
类上的静态方法将为您完成繁重的工作。