はじめに
文字列とenumを相互に変換することが結構多いため、テクニック集としてまとめることにしました。
同じ境遇にあったC#erの皆さんにも伝わればいいなと思います。
サンプルコードで使用するenumを毎回記述するのは冗長なため、ここに記述しておきます。
(適当にサンプル用に定義しただけなので、このenumに意味はほとんどありません。)
enum Authority
{
ReadWrite, // 読み書き可能
Read, // 読み込み専用
None // 権限なし
}
文字列 から enum への変換
文字列からenumへ変換する際に整数型にキャストしてからenumへキャストしたりしていませんか?
Authority auth = (Authority)int.Parse("1"); // こんな感じ
Console.WriteLine(auth);
Read
いちいち整数型にキャストするのは面倒ですよね。
Enum.Parse(Type, String)
を使えば整数型へのキャストは不要です。
Authority auth = (Authority)Enum.Parse(typeof(Authority), "1");
Console.WriteLine(auth);
Read
さらに嬉しいことにEnum.Parse(Type, String)
は名称からenumを取得することもできます。
Authority auth = (Authority)Enum.Parse(typeof(Authority), "Read");
Console.WriteLine(auth);
Read
名称の大文字小文字が合わないというときはEnum.Parse(Type, String, Boolean)
を使いましょう。
第3引数にtrue
を指定すれば、大文字と小文字を区別せずに変換できます。
ちなみに以下の例でtrue
を指定しない場合はSystem.ArgumentException
が発生します。
Authority auth = (Authority)Enum.Parse(typeof(Authority), "read", true);
Console.WriteLine(auth);
Read
System.ArgumentException: 要求された値 'read' が見つかりませんでした。
.NET Core
であればEnum.Parse
にジェネリックバージョンがあるようで、以下のような記述も可能です。
enumへのキャストが無い分スッキリした記述になっています。
(.NET Framework
でもできるようになるといいなぁ)
Authority auth = Enum.Parse<Authority>("Read");
Console.WriteLine(auth);
Read
Authority auth = Enum.Parse<Authority>("1");
Console.WriteLine(auth);
Read
enum から 文字列 への変換
今度は逆にenumから文字列へ変換する場合を考えてみます。
enumを整数型にキャストしてから文字列に変換したりしてませんか?
string authValue = ((int)Authority.ReadWrite).ToString(); // こんな感じ
Console.WriteLine(authValue);
0
そんなときはEnum.ToString(String)
を使って書式を指定すればキャストせずとも文字列を取得できます。
指定できる書式については、こちらを参照してください。
string authValue = Authority.ReadWrite.ToString("d");
Console.WriteLine(authValue);
0
まとめ
文字列とenumの変換についてまとめてみました。
Enumクラスについてもっと知りたい場合はこちらのドキュメントをご覧ください。
この記事でC#のコードが少しでも綺麗になれば幸いです。
それではまた。
TomoProg