C#の勉強をしています.
次の列挙型があるとします.

enum Cat
{
Pochi, Tama, Mike
}

Cat.Tamaで2を取得できるそうですが,
標準入力からTamaという文字列を受け取ったときに,
Tamaが2というのをどう取得すればいいですか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>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が入ります。
    • good
    • 0

ポイントなりそうな部分をコメントにしました。



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("入力された名前は無かったにゃ。");
}
}
}

要はキャスト。
    • good
    • 0

>Cat.Tamaで2を取得できる


いいえ,
Pochiが0でTamaが1でMikeが2です。

http://msdn.microsoft.com/en-us/library/sbbt4032 …

/* --------------------------------- */
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); // 単なる待機
}
}
}
/*
一応こんな風に組めば可能ではありますが,開発ツールを作るのでもない限り,これを使わなければならないのは作成しようとしているプログラムの設計が悪いからで,設計を先に見直すべきだ,と俺は考えます。
*/
/* ------------------------------------- */
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング