如何通过传递枚举值和属性类型来获取枚举的自定义属性?

汉克

在线上有很多示例,这些示例创建一个枚举扩展方法,该方法以枚举值作为参数,并且在该方法中获取特定属性,例如:

namespace MVVMProj.ProjUtilities
{
  public class EnumerationHelpers
  {
    public static string GetStatusText(this Enum value)
    {
      var type = value.GetType();

      string name = Enum.GetName(type, value);
      if (name == null) { return null; }

      var field = type.GetField(name);
      if (field == null) { return null; }

      var attr = Attribute.GetCustomAttribute(field, typeof(StatusTextAttribute)) as StatusTextAttribute;
      if (attr == null) { return null; }

      return attr.StatusText;
    }
  }
}

我想知道的是,是否有一种方法也可以将属性类型传递给该方法,所以我不需要继续为每个不同的属性编写特定的方法?

这尚未完成,但是,它应该使您了解我要实现的目标:

namespace MVVMProj.ProjUtilities
{
  public class EnumerationHelpers
  {
    public static string GetCustomAttribute(this Enum value, Type customAttr) 
             //Or instead of passing a Type, a string of the attribute's name
    {
      var type = value.GetType();

      string name = Enum.GetName(type, value);
      if (name == null) { return null; }

      var field = type.GetField(name);
      if (field == null) { return null; }

      var attr = Attribute.GetCustomAttribute(field, ....) as ....;
      if (attr == null) { return null; }

      return attr....;
    }
  }
}

我想我也不能只返回一个字符串,因为它可以是任何数据类型。

某些通用方法?

任何建议将不胜感激!

编辑:用法:

它遍历创建字典的枚举,因此我可以在组合框中显示值。仅当属性与if语句中的条件匹配时,才添加项目。

还有一点要注意的是,custom属性也是一个枚举。

Aybe:“ item”只是迭代中的一个对象,因此我进行了强制转换。尽管我在if语句中遇到错误,但它试图将CaseTypeAttribute与实际CaseType枚举值进行比较,我该怎么办才能解决?

错误:
严重级代码描述项目文件行抑制状态错误CS0019运算符'=='不能应用于类型'SBC.CaseTypeAttribute'和'SBC.CaseType'的操作数

private Dictionary<int, string> _substancetypes;
public Dictionary<int, string> SubstanceTypes
{
  get
  {
    if (_substancetypes == null)
    {
      _substancetypes = new Dictionary<int, string>();
      foreach (var item in Enum.GetValues(typeof(SBC.SubstanceTypeCode)))
      {
        var descriptionAttribute = ((SBC.SubstanceTypeCode)item).GetAttribute<SBC.CaseTypeAttribute>();
        if (descriptionAttribute != null && 
               descriptionAttribute == SBC.CaseType.Exposures) //Error here
        {
          _substancetypes.Add((int)item, CTS_MVVM.CTS_Utilities.EnumerationHelpers.GetDescriptionFromEnumValue((SBC.SubstanceTypeCode)item));
        }
      }
    }

    return _substancetypes;
  }
}
艾比

像这样吗

using System;
using System.ComponentModel;
using System.Reflection;

namespace ConsoleApp1
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            var descriptionAttribute = MyEnum.A.GetAttribute<DescriptionAttribute>();
        }
    }

    public static class EnumExtensions
    {
        public static T GetAttribute<T>(this Enum @enum) where T : Attribute
        {
            var type = @enum.GetType();
            var name = Enum.GetName(type, @enum);
            var field = type.GetField(name);
            var attribute = field.GetCustomAttribute<T>();
            return attribute;
        }
    }

    public enum MyEnum
    {
        [Description("A")] A,
        [Description("B")] B
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取自定义属性属性内的枚举类型

来自分类Dev

通过自定义属性获取枚举(通用)

来自分类Dev

如何获取枚举自定义属性的所有可能值?

来自分类Dev

如何在spring数据中使用JPQL或Criteria Api通过枚举属性获取自定义数据组?

来自分类Dev

如何通过指定自定义属性值来获取部署($ kubectl get deployments)?

来自分类Dev

如何通过翻新在@Query中传递自定义枚举?

来自分类Dev

如何使JOOQ生成枚举类型和自定义类型?

来自分类Dev

如何使用自定义订单属性对枚举排序?

来自分类Dev

如何通过it属性设置一些值来枚举

来自分类Dev

Android 自定义视图:如何通过 LiveData 和数据绑定更新自定义枚举属性

来自分类Dev

如何将枚举值设置为Web用户控件的自定义属性?

来自分类Dev

自定义属性-获取枚举的“不是有效的命名属性参数”

来自分类Dev

通过自定义属性传递值以进行方法访问

来自分类Dev

如何获取枚举中的属性值?

来自分类Dev

自定义枚举属性给出错误的字符串类型不允许

来自分类Dev

如何使用自定义错误枚举来修复不匹配的返回类型?

来自分类Dev

自定义属性在Javascript中是不能枚举的吗?

来自分类Dev

在 Android 中使用枚举自定义视图属性

来自分类Dev

如何在Python(类似于Javascript)的枚举中定义自定义属性

来自分类Dev

如何通过表别名选择自定义类型的属性?

来自分类Dev

如何通过表别名选择自定义类型的属性?

来自分类Dev

带有自定义值和 C++ 构造函数的 Java 类型枚举

来自分类Dev

如何通过其自定义属性获取jquery对象

来自分类Dev

如何通过在Python中动态传递“枚举成员名称”来获取“值”?

来自分类Dev

如何通过javascript中的自定义属性的特定值获取元素?

来自分类Dev

如何在jQuery中通过自定义属性获取输入字段的值

来自分类Dev

如何通过 JavaScript 更改 HTML 自定义属性值?

来自分类Dev

如何读取与 Rust 中的自定义类型关联的枚举值?

来自分类Dev

可编码的自定义枚举类型

Related 相关文章

  1. 1

    获取自定义属性属性内的枚举类型

  2. 2

    通过自定义属性获取枚举(通用)

  3. 3

    如何获取枚举自定义属性的所有可能值?

  4. 4

    如何在spring数据中使用JPQL或Criteria Api通过枚举属性获取自定义数据组?

  5. 5

    如何通过指定自定义属性值来获取部署($ kubectl get deployments)?

  6. 6

    如何通过翻新在@Query中传递自定义枚举?

  7. 7

    如何使JOOQ生成枚举类型和自定义类型?

  8. 8

    如何使用自定义订单属性对枚举排序?

  9. 9

    如何通过it属性设置一些值来枚举

  10. 10

    Android 自定义视图:如何通过 LiveData 和数据绑定更新自定义枚举属性

  11. 11

    如何将枚举值设置为Web用户控件的自定义属性?

  12. 12

    自定义属性-获取枚举的“不是有效的命名属性参数”

  13. 13

    通过自定义属性传递值以进行方法访问

  14. 14

    如何获取枚举中的属性值?

  15. 15

    自定义枚举属性给出错误的字符串类型不允许

  16. 16

    如何使用自定义错误枚举来修复不匹配的返回类型?

  17. 17

    自定义属性在Javascript中是不能枚举的吗?

  18. 18

    在 Android 中使用枚举自定义视图属性

  19. 19

    如何在Python(类似于Javascript)的枚举中定义自定义属性

  20. 20

    如何通过表别名选择自定义类型的属性?

  21. 21

    如何通过表别名选择自定义类型的属性?

  22. 22

    带有自定义值和 C++ 构造函数的 Java 类型枚举

  23. 23

    如何通过其自定义属性获取jquery对象

  24. 24

    如何通过在Python中动态传递“枚举成员名称”来获取“值”?

  25. 25

    如何通过javascript中的自定义属性的特定值获取元素?

  26. 26

    如何在jQuery中通过自定义属性获取输入字段的值

  27. 27

    如何通过 JavaScript 更改 HTML 自定义属性值?

  28. 28

    如何读取与 Rust 中的自定义类型关联的枚举值?

  29. 29

    可编码的自定义枚举类型

热门标签

归档