C#におけるenum(列挙型)の基本的な使い方です。
enum(列挙型)の超基本的な使い方
まず、基本的なenum(列挙型)の使い方です。
enum 列挙型オブジェクト名 { 要素1, 要素2, 要素3, 要素4 }
とりあえずこうやって宣言すれば、
列挙型オブジェクト名.要素1
と記述すると、enum(列挙型)の要素を参照できます。
まずはここからです。これをどう使うかは、状況次第になります。
何も考えずにenumを使う
とりあえずenumの中身を取り出す
さて、何も考えずにenumを使ってみます。次の画面を用意しました。
ボタンを押したら列挙型の全要素がテキストボックスに表示されるというサンプルです。
ソースコードはこちら。
//曜日のenum public enum enumWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } //画面 public partial class FormEnumTest : Form { public FormEnumTest() { InitializeComponent(); } private void cmdEnum_Click(object sender, EventArgs e) { foreach(enumWeek value in Enum.GetValues(typeof(enumWeek))) { //テキストボックスに表示 txtResult.Text += value + Environment.NewLine; } } }
enumの例で頻出される曜日の列挙型ですね。実行すると、次の結果になります。
記述されたenumの中身(曜日)がそのままテキストボックスに表示されました。enumに列挙した値そのものを使うことも出来ます。
enumの中身を取り出して数値型にキャストする
ところで、取り出したenumの中身(要素)は数値型にキャストすることが可能です。サンプルコードをご覧下さい。
//曜日のenum public enum enumWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } //画面 public partial class FormEnumTest : Form { public FormEnumTest() { InitializeComponent(); } private void cmdEnum_Click(object sender, EventArgs e) { foreach(enumWeek value in Enum.GetValues(typeof(enumWeek))) { //テキストボックスに表示 txtResult.Text += (int)value + Environment.NewLine; } } }
先ほどとほぼ変わりはありませんが、テキストボックスに代入するenumの値をint型にキャストしています(ソースコード太字の部分)。
これを実行すると、次の様になります。
先ほどはenumに記載した要素がそのままテキストボックスに表示されていましたが、int型にキャストすることで、数字が表示されています。
何で?と問われると、「そういう仕様なので、覚えて下さい」とお答えしておきます。
数値を指定してenumを定義する
例えば、数値を指定してenumを定義することも出来ます。
//曜日のenum public enum enumWeek { Sunday = 1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
Sundayに「1」を代入しているだけですが、これを実行すると、次の様になります。
先ほどはenumに要素を並べただけで、数字を代入せず、int型にキャストしただけなので、0~6の値が出力されました。
ですが、Sunday(enumの要素の先頭)に「1」を代入してint型にキャストして出力した場合、1~7の値が出力されています。
これ、良い感じに数字が増えるわけでは無く、enum要素のうち最後に数値を代入した値に1ずつ加算しているだけです。
例えば、次の様にenumを定義した場合、どうなるでしょうか?
//曜日のenum public enum enumWeek { Sunday = 1, Monday = 10, Tuesday = 100, Wednesday, Thursday, Friday, Saturday }
直感的に考えたら「Wednesday」には「1000」が入りそうですが、こうなります。
「Tuesday = 100」としており、「Wednesday」は空っぽ…なので、enumは自動的に「Wednesday = 101」とします(要素のうち、最後に代入されている値に+1する)。
参考リンク
列挙型 (C# リファレンス)|Microsoft Docs
.