Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态枚举转换器_C#_Wpf_Markup Extensions - Fatal编程技术网

C# 动态枚举转换器

C# 动态枚举转换器,c#,wpf,markup-extensions,C#,Wpf,Markup Extensions,我想为应用程序中所有可能的枚举创建一个动态双向转换器 我不想为每个枚举创建一个转换器,我想创建一个转换器,提供从枚举到字节以及从字节到枚举的转换,反之亦然 我怎么去那里?我的方法已经是双向的,但需要在代码中使用静态强制转换(MyEnum): public class MyEnumConverter : MarkupExtension, IValueConverter { public object Convert(object value, System.Typ

我想为应用程序中所有可能的枚举创建一个动态双向转换器

我不想为每个枚举创建一个转换器,我想创建一个转换器,提供从枚举到字节以及从字节到枚举的转换,反之亦然

我怎么去那里?我的方法已经是双向的,但需要在代码中使用静态强制转换(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;
        }
    }

尝试这些扩展方法,它将从enum转换为数据类型(int,byte,…),从数据类型(int,byte,…)转换为enum,反之亦然

    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());
    }
publicstatict-ToEnumValue(此枚举类型)
{
返回(T)Enum.ToObject(typeof(E),enumType);
}
公共静态E-ToEnumType(此T枚举字符串)
{
返回(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
public enum EmployeeType
{
永久=0,
合同=1,
}
int value=EmployeeType.Contract.ToEnumValue();//1.
EmployeeType EmployeeType=value.ToEnumType();//合同

我相信你可以用两种不同的方法来完成

选项1:利用convert方法上的
targetType
参数。当需要转换为枚举时,
targetType
是枚举类型。您可以使用
System.Enum
类上的一个静态方法进行转换

选项2:在xaml中,使用ConverterParameter传入要转换为的枚举类型:

Converter={local:MyConverter, ConverterParameter={x:Type MyEnumType}}

如果您选择该路径,则类型将位于convert方法的
参数中。同样地,
System.Enum
类上的静态方法将为您完成繁重的工作。

您可以混合使用byte和int。您可以发布如何绑定到Enum吗?