【问题标题】:Add TypeConverter attribute to enum in runtime在运行时将 TypeConverter 属性添加到枚举
【发布时间】:2023-03-25 21:30:02
【问题描述】:

在 C#/WPF 应用程序中,我向一些枚举添加了 TypeConverter 属性,以便显示本地化文本而不是枚举文本:

[TypeConverter(typeof(LocalizedEnumTypeConverter))]
public enum MyEnum
{
    EnumVal1 = 0,
    EnumVal2 = 1,
    EnumVal3 = 2,
}

我已经实现了 LocalizedEnumTypeConverter 来执行这个任务。

当我尝试对另一个程序集中定义的枚举使用相同的方法时会出现问题,该枚举无法访问 LocalizedEnumTypeConverter,并且它与其他应用程序共享(也就是说,我无法添加对程序集的引用其中 LocalizedEnumTypeConverter 被定义)。

有没有办法在运行时添加 TypeConverter 属性?这样我就可以在没有 TypeConverter 属性的情况下将枚举留在其他程序集中,然后在我的应用程序的运行时添加它。

【问题讨论】:

  • 既然它们在不同的程序集中并且不共享共同的代码库,为什么不在另一个程序集中实现 LocalizedEnumTypeConverter 呢?
  • 重点是 LocalizedEnumTypeConverter 是用于本地化的程序集的一部分,如果可以避免的话,我不想将其添加为对访问枚举的其他项目的引用。此外,我的方法避免修改共享枚举,因为该属性只会添加到我当前的程序中。

标签: c# wpf enums attributes typeconverter


【解决方案1】:

这可以使用 TypeDescriptor 类 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);

【讨论】:

  • 成功了!我使用了您的代码,但在最后一行将 MyEnum 更改为 typeof(MyEnum) 以引用类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2021-05-17
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多