Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9364

【C#】Enumでよく使うけど忘れがちなもののメモ

$
0
0

はじめに

毎回「あれ、どう書くんだっけ」と調べているので、まとめておこうと思います。

// 各サンプルコードで使用するEnumpublicenumSeasons{Spring,Summer,Autumn,Winter}

Enumにメソッドを実装(拡張メソッド)

publicstaticclassSeasonsExt{publicstaticstringGetJapaneseName(thisSeasonsparam){switch(param){caseSeasons.Spring:return"春";caseSeasons.Summer:return"夏";caseSeasons.Autumn:return"秋";caseSeasons.Winter:return"冬";}}}// 使い方varseason=Seasons.Spring;varjapaneseName=season.GetJapaneseName();

定義されている値かどうかチェック

Console.WriteLine(Enum.IsDefined(typeof(Seasons),0));// TrueConsole.WriteLine(Enum.IsDefined(typeof(Seasons),4));// FalseConsole.WriteLine(Enum.IsDefined(typeof(Seasons),"Spring"));// TrueConsole.WriteLine(Enum.IsDefined(typeof(Seasons),"spring"));// False(大文字・小文字区別される)

型変換

int ⇔ Enum変換

// int -> EnumSystem.Console.WriteLine((Seasons)0);// SpringSystem.Console.WriteLine((Seasons)4);// 4(定義されていない値でも例外は発生しない)// Enum -> intSystem.Console.WriteLine((int)Seasons.Winter);// 3

string ⇔ Enum変換

// string -> Enumif(Enum.TryParse<Seasons>("Summer",outvarseason)){System.Console.WriteLine(season);// Summer}// 数値の文字列も変換できるif(Enum.TryParse<Seasons>("1",outvarseason)){System.Console.WriteLine(season);// Summer}// Enum -> stringSystem.Console.WriteLine(Seasons.Winter.ToString());// Winter

int/string -> Enumの変換用メソッド作ってみた

なんだか少しまどろっこしいかんじになってしまいました。

publicstaticT?ConvertToEnum<T>(objectvalue)whereT:struct{// TがEnumかどうかチェック// where T : Enum にすると、戻り値をNullableにできないので...if(!typeof(T).IsEnum)returnnull;stringstringValue;switch(value){caseintintVal:stringValue=intVal.ToString();break;casestringstringVal:stringValue=stringVal;break;default:// int, string以外は処理対象外とするreturnnull;}// TryParseする前に、定義されている値かチェックする// ※ 数値の場合、定義されていない値でもTryParseが成功してしまうためif(!Enum.IsDefined(typeof(T),value))returnnull;if(Enum.TryParse<T>(stringValue,outvarresult)){returnresult;}returnnull;}

Viewing all articles
Browse latest Browse all 9364

Latest Images

Trending Articles