【问题标题】:How to return enum from property如何从属性返回枚举
【发布时间】:2016-02-21 17:28:21
【问题描述】:

有没有办法通过属性返回完整的枚举?这是我想做的例子:

// MyEnums.cs
public enum Languages
{
    cs = 0,
    pl = 1,
    en = 2,
    de = 3,
}

// General.cs
public static MyEnums.Languages Languages
{
    get
    {
        return MyEnums.Languages;
    }
}

【问题讨论】:

  • 什么?为什么要返回一个完整的枚举?
  • enum 是一个类型,不能“返回”。
  • 没有。我想你可能对枚举是什么感到困惑。它是一个type,而不仅仅是一个列表。尝试将Languages 作为值返回与return System.String; 一样有意义。您是否尝试返回一个为所有语言设置了标志的 Languages 变量?
  • 我不认为 OP 要求与副本相同的东西。

标签: c# oop properties enums


【解决方案1】:

如果要返回枚举中定义的所有可用值,可以使用

Enum.GetValues(typeof(MyEnums.Languages));

并修改您的方法,使其返回MyEnums.Languages[](或List<MyEnums.Languages>,调用代码总是更容易管理)

【讨论】:

    【解决方案2】:

    要获取枚举中的所有值,请使用Enum.GetValues。您可能还想将其转换回正确的类型:

    Languages[] languages = Enum.GetValues(typeof(Languages)).Cast<Languages>().ToArray();
    // languages is an array containing { Languages.cs, Languages.pl, Languages.en, Languages.de }
    

    【讨论】:

      【解决方案3】:

      enum 是一种类型,我猜你实际上想要获取所有枚举值。你可以使用这个包装器:

      public static class EnumWrapper<T> where T : struct
      {
          public static T[] Values
          {
              get
              {
                  Type ofT = typeof(T);
                  if (!ofT.IsEnum) throw new ArgumentException("Must be enum type");
                  return Enum.GetValues(ofT).Cast<T>().ToArray();
              }
          }
      }
      

      // ...

      Languages[] languages = EnumWrapper<Languages>.Values;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 2013-06-12
        • 2020-08-10
        相关资源
        最近更新 更多