【问题标题】:how to set an enum instance by iterating through an enum [duplicate]如何通过遍历枚举来设置枚举实例
【发布时间】:2017-11-06 18:35:09
【问题描述】:

不知道如何用文字表达我想要的。我需要在给定输入的情况下设置枚举类型。示例代码如下:

    Class Foo{
        enum Color{
           BLUE,
           RED,
           YELLOW
        }
        public Color color;

        public setColor(string col){
            var colorsEnum = Enum.GetNames(typeof(Color));
            foreach(var c in colorsEnum){
                if(c == col)
                    color = c.getEnum();
            }
        }
    }

【问题讨论】:

标签: c# enums


【解决方案1】:

您甚至不需要遍历名称,为什么不直接使用Contains

这里的诀窍是使用Enum.Parse。检查颜色是否有效后,只需拨打Enum.Parse 即可:

public void setColor(string col){
    if (Enum.GetNames(typeof(Color)).Contains(col)) {
        color = (Color)Enum.Parse(typeof(Color), col);
    }
}

【讨论】:

  • 行得通,谢谢!
【解决方案2】:

使用Enum.TryParse<Color>(string value, bool ingnoreCase, out Color result) 将字符串转换为枚举值。

Color color;
if (!Enum.TryParse<Color>("blUE", true, out color))
{
    color = Color.YELLOW; // default value
}

试试小提琴: https://dotnetfiddle.net/7S6IFf

【讨论】:

  • 那很好,但在我的情况下不起作用。我没有在问题中说,但我真的需要遍历所有枚举并检查我的输入字符串是否包含颜色。因为输入可以是“香蕉黄”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2010-12-12
  • 2011-09-01
  • 2011-09-07
  • 2015-08-13
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多