2017-11-06 31 views
0

単語をどのように表現するかわからない。私は入力を与えてenum型を設定する必要があります。サンプルコードは次のとおりです。列挙型を反復して列挙型インスタンスを設定する方法

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(); 
      } 
     } 
    } 
+0

はあなたが意味するかを[Enum.Parse()](https://msdn.microsoft.com/en-us/library/essfb559(V = vs.110 ).aspx)? – Icemanind

答えて

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); 
    } 
} 
+0

それは、ありがとう! –

0

は、列挙型の値に文字列を変換するには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

+0

それは素晴らしいことですが、私の場合はうまくいかないでしょう。 私は質問では言いませんでしたが、実際にはすべての列挙を繰り返し、入力文字列に色が含まれているかどうかを確認する必要があります。入力が "バナナイエロー"になる可能性があるためです。 –