在运行时将 TypeConverter 属性添加到枚举
Add TypeConverter attribute to enum in runtime
在 C#/WPF 应用程序中,我向一些枚举添加了 TypeConverter 属性,以便显示本地化文本而不是枚举的文本:
[TypeConverter(typeof(LocalizedEnumTypeConverter))]
public enum MyEnum
{
EnumVal1 = 0,
EnumVal2 = 1,
EnumVal3 = 2,
}
我已经实现了 LocalizedEnumTypeConverter 来执行这个任务。
当我尝试对在另一个程序集中定义的枚举使用相同的方法时出现问题,该程序集无法访问 LocalizedEnumTypeConverter,并且与其他应用程序共享(即,我无法添加对定义 LocalizedEnumTypeConverter 的程序集。
有没有办法在运行时添加 TypeConverter 属性?这样我就可以在没有 TypeConverter 属性的情况下将枚举保留在另一个程序集中,然后在运行时将其添加到我的应用程序中。
这可以使用 TypeDescriptor class https://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx 来完成。请参考以下示例。
Attribute[] newAttributes = new Attribute[1];
newAttributes[0] = new TypeConverterAttribute(typeof(LocalizedEnumTypeConverter));
TypeDescriptor.AddAttributes(MyEnum, newAttributes);
在 C#/WPF 应用程序中,我向一些枚举添加了 TypeConverter 属性,以便显示本地化文本而不是枚举的文本:
[TypeConverter(typeof(LocalizedEnumTypeConverter))]
public enum MyEnum
{
EnumVal1 = 0,
EnumVal2 = 1,
EnumVal3 = 2,
}
我已经实现了 LocalizedEnumTypeConverter 来执行这个任务。
当我尝试对在另一个程序集中定义的枚举使用相同的方法时出现问题,该程序集无法访问 LocalizedEnumTypeConverter,并且与其他应用程序共享(即,我无法添加对定义 LocalizedEnumTypeConverter 的程序集。
有没有办法在运行时添加 TypeConverter 属性?这样我就可以在没有 TypeConverter 属性的情况下将枚举保留在另一个程序集中,然后在运行时将其添加到我的应用程序中。
这可以使用 TypeDescriptor class https://msdn.microsoft.com/en-us/library/system.componentmodel.typedescriptor.aspx 来完成。请参考以下示例。
Attribute[] newAttributes = new Attribute[1];
newAttributes[0] = new TypeConverterAttribute(typeof(LocalizedEnumTypeConverter));
TypeDescriptor.AddAttributes(MyEnum, newAttributes);