Csharp/C#教程:动态枚举转换器分享


动态枚举转换器

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

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

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

我相信你可以用两种不同的方式做到这一点。

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

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

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

如果你去那条路线,那么类型将在convert方法的parameter参数中。 同样, System.Enum类上的静态方法将为您完成繁重的工作。

尝试这些扩展方法,它将从枚举转换为数据类型(int,byte,..),并从数据类型(int,byte,..)转换为枚举,反之亦然。

  public static T ToEnumValue(this E enumType) { return (T)Enum.ToObject(typeof(E), enumType); } public static E ToEnumType(this T enumString) { return (E)Enum.Parse(typeof(E), enumString.ToString()); } 

例如:要使用上述方法,请使用枚举

上述就是C#学习教程:动态枚举转换器分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public enum EmployeeType { Permanent = 0, Contract = 1, } int value = EmployeeType.Contract.ToEnumValue(); // 1 EmployeeType employeeType = value.ToEnumType(); // Contract 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/955244.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐