2016年2月9日火曜日

C# 列挙型 enum

こんにちは山田です。

開発言語:C#

C#の基本構文でいまいち呑み込めなかった部分について
わからないなりに解説をしようと思います。

~良くわかっていない人による解説~

■列挙型とは (enum)
特定の値しか取らないようなものに対して使用します。
たとえば曜日だったら 月~日までの7つのみになります。
この曜日を例に取り上げていこうと思います。

■基本構文

【定義の仕方】
列挙型の宣言はenumをはじめに記述し、つづいて列挙型の名前を記述します。
-------------------------------------------------
enum 列挙型名
{
  メンバー1, メンバー2, …, メンバーn    ←列挙定数
}
-------------------------------------------------

例1)
-------------------------------------------------
enum Week
{
Sun, Mon, Tue, Wed, Thu, Fri, Sat
}
-------------------------------------------------
そしてそれぞれの識別子には0から順番に1ずつ増える整数値が割り当てられます。

Sun:0
Mon:1
Tue:2
 :
Sun:6


例2)
-------------------------------------------------
enum Week
{
 Sun, Mon=100, Tue, Wed, Thu, Fri=200, Sat
}
-------------------------------------------------
もし任意の値を代入すると、そこから1ずつ増加します

Sun:0
Mon:100
Tue:101
Wed:102
Thu:103
Fri:200
Sat:201

例3)
列挙要素の基になる既定の型はintですが、
Int型以外で整数値を使いたい場合は以下ように記述します。
-------------------------------------------------
enum Week : byte
{
 Sun =1
 ,Mon =2
 ,Tue =3
 ,Wed =4
 ,Thu =5
 ,Fri =6
 ,Sat =7
}
-------------------------------------------------
他にはこんな型が使用できます。
byte、sbyte、short、ushort、int、uint、long、ulong


【利用する方法】

識別子を参照する時は以下のように記述します
----------------------------
列挙型名.メンバー名
----------------------------

例4)
using System;

class Sample
{
 protected enum Week : int
 {
 Sun =1
 ,Mon =20
 ,Tue =30
 ,Wed =40
 ,Thu =50
 ,Fri =60
 ,Sat =70
 }

 /// 
 /// 日本語の曜日をただ返すプログラム
 /// 
 protected void SampleProgram(Week[] _day){
  for (int i = 0; i < _day.Length; i++)
  {
   switch (_day[i])
   {
    case Week.Sun: Console.Write("日曜"); break;
    case Week.Mon: Console.Write("月曜"); break;
    case Week.Tue: Console.Write("火曜"); break;
    case Week.Wed: Console.Write("水曜"); break;
    case Week.Thu: Console.Write("木曜"); break;
    case Week.Fri: Console.Write("金曜"); break;
    case Week.Sat: Console.Write("土曜"); break;
   }
  } 
 }

 static void Main()
 {
  Week[] day = new Week[] { Week.Mon, Week.Tue, Week.Wed, Week.Thu, Week.Fri, Week.Sat, Week.Sun };
  SampleProgram(day);
    }
}

結果:月曜火曜水曜木曜金曜土曜日曜

すごく微妙なサンプルになったと思いました。


■ちなみに整数値の方を使用したいときは、
以下のように型変換すればOKです。
----------------------------
(整数型)列挙型名.メンバー名
----------------------------


■その他こわざ

参考になった応用の例です。
・enumの値を任意の文字列に変換する
・数値がenumで定義済みがどうかチェックする
・enumの値を列挙する
http://qiita.com/hugo-sb/items/38fe86a09e8e0865d471

0 コメント:

コメントを投稿