C#のEnumについて のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
C#のEnumについて

君がEnumに対し行いたいことは、既にある
#code(c-sharp){{
//難易度の列挙型を定義しよう
Enumに対し行いたいことは、既にある

難易度の列挙型を定義しよう
#code(csharp){{
public enum Difficulty { Easy, Normal, Hard };
//for文で回したい
for(var i=0;i<(int)Difficulty.Hard+1;i++){
}
//Extremeなんてのを追加した
}}
for文で回したい
#code(csharp){{
for(var i=0;i<(int)Difficulty.Hard+1;i++)
}}
Extremeなんてのを追加した
#code(csharp){{
public enum Difficulty { Easy, Normal, Hard, Extreme };
//先ほどのfor文は
for(var i=0;i<(int)Difficulty.Extreme+1;i++){
}
//に変更する
//列挙型に変更がある度にfor文まで変更するのは良くない
}}
先ほどのfor文は
#code(csharp){{
for(var i=0;i<(int)Difficulty.Extreme+1;i++)
}}
に変更する

列挙型に変更がある度にfor文まで変更するのは良くない
#code(csharp){{
public enum Difficulty { Easy, Normal, Hard, Extreme, MAX };
for(var i=0;i<(int)Difficulty.MAX;i++){
}
//MAXは便宜上つけただけで実際には使われない
for(var i=0;i<(int)Difficulty.MAX;i++)
}}
ここでC#のEnumについて
(using System)
MAXは便宜上つけただけで実際には使われない

ここでC#のEnumについて(using System)
値を列挙
#code(csharp){{
Enum.GetValues(typeof(Difficulty))
}}
名前を列挙
#code(csharp){{
Enum.GetNames(typeof(Difficulty))
}}
サイズを取得
#code(csharp){{
Enum.GetNames(typeof(Difficulty)).Length
}}
forで回す
#code(csharp){{
for(var i=0;i<Enum.GetNames(typeof(Difficulty)).Length;i++)
}}
foreachで回す
#code(csharp){{
foreach(string str in Enum.GetValues(typeof(Difficulty)))
}}
Difficulty型diffをstring型にする
#code(csharp){{
string str=diff.ToString();
}}
string型strをDifficulty型にする
#code(csharp){{
Difficulty diff=(Difficulty)Enum.Parse(typeof(Difficulty), str);
}}
もしstrに一致する値がなかったら?
例外がスローされる

例外処理を入れずに一致するか見たい
#code(csharp){{
if (Enum.IsDefined(typeof(Difficulty), str))
}}
一致する場合のみ変換するTryParseなんてのもあるらしい

参考
http://qiita.com/hugo-sb/items/38fe86a09e8e0865d471
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_016/csharp_abc01.html
http://dobon.net/vb/dotnet/programing/enumgetvalues.html