• ベストアンサー

C#の列挙型

C#の勉強をしています. 次の列挙型があるとします. enum Cat { Pochi, Tama, Mike } Cat.Tamaで2を取得できるそうですが, 標準入力からTamaという文字列を受け取ったときに, Tamaが2というのをどう取得すればいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

>Cat.Tamaで2を取得できるそうですが, 通常0から始まるので Pochiが0 Tamaが1、Mikeが2になると思います >標準入力からTamaという文字列を受け取ったときに, >Tamaが2というのをどう取得すればいいですか? Cat cat = (Cat)System.Enum.Parse(typeof(Cat), "Mike"); int value = (int)cat; とすれば"Mike"という文字列に対して valueに数字の2が入ります。

その他の回答 (2)

回答No.3

ポイントなりそうな部分をコメントにしました。 public enum Cat{ Pochi=1,Tama,Mike}//Pochiを1にしてTamaで2を取得出来るようにしておく。 class Program { public static void Main() { int num=-1; string [] names; Console.WriteLine("猫の名前を入れてくださいにゃ。"); string name = Console.ReadLine(); names = Enum.GetNames(typeof(Cat)); for(int i=0;i<names.Langth;i++) { if(name==names[i]) { num=(int)Enum.Parse(typeof(Cat),name);//int型にキャスト。 } } if(num!=-1) { Console.WriteLine("{0}={1}",name); } else { Console.WriteLine("入力された名前は無かったにゃ。"); } } } 要はキャスト。

回答No.2

>Cat.Tamaで2を取得できる いいえ, Pochiが0でTamaが1でMikeが2です。 http://msdn.microsoft.com/en-us/library/sbbt4032%28VS.80%29.aspx /* --------------------------------- */ using System.Reflection; using System.Collections.Generic; public enum Cat { Pochi, Tama, Mike } public class Q4994976{ public static void Main(string[] s){ try{ int x = (int)System.Type.GetType("Cat",true,false).GetField(System.Console.ReadLine(),BindingFlags.Public | BindingFlags.Static).GetRawConstantValue(); System.Console.WriteLine(x); }catch(System.NullReferenceException e){ System.Diagnostics.Debug.WriteLine(e.ToString()); }finally{ System.Console.ReadKey(true); // 単なる待機 } } } /* 一応こんな風に組めば可能ではありますが,開発ツールを作るのでもない限り,これを使わなければならないのは作成しようとしているプログラムの設計が悪いからで,設計を先に見直すべきだ,と俺は考えます。 */ /* ------------------------------------- */