MENU

【C#超入門】enum(列挙体)の使い方|定数に名前を付けられるenumキーワード

C# enumr列挙体

今回はC#のenum(列挙体)の使い方を解説していきます。

目次

enum(列挙体)とは?

enumキーワードは列挙体(enumeration type)とも言われており、一連の複数の定数に対して名前を付けられる特徴があります。

代表的な例が曜日や日付、色などです。

ちなみに、enumの読み方は正確には「イヌーム」や「イニューム」と呼ぶようです。これは英語の「enumeration」から来ており「inùːməréiʃən」と発音するためと言われています。
ただ、私の周りでは「イーナム」とか「エナム」と読んだりしているので、自分が呼びやすい読み方をすればいいでしょう。

enumの使い方

続いてenumの使い方を解説していきましょう。

enumを使ってスマホメーカーを定義してみる

ここでは、スマホのメーカーを定義してみたいと思います。enum オブジェクト名 {列挙子1, 列挙子2, ・・・};で定義できます。

enumの定義

enum SmartPhoneManufacturer
{
    Apple,
    Google,
    Sony,
    Fujitsu,
    Sharp,
}

列挙体の初期のデータ型はintで0からインクリメントされて定義されていきます。試しに、そのまま値を出力するコードを書いてみます。

コード

ng System;

namespace EnumTest
{
    class Program
    {
        enum SmartPhoneManufacturer
        {
            Apple,
            Google,
            Sony,
            Fujitsu,
            Sharp,
        }

        static void Main(string[] args)
        {
            Console.WriteLine((int)SmartPhoneManufacturer.Apple);
            Console.WriteLine((int)SmartPhoneManufacturer.Google);
            Console.WriteLine((int)SmartPhoneManufacturer.Sony);
            Console.WriteLine((int)SmartPhoneManufacturer.Fujitsu);
            Console.WriteLine((int)SmartPhoneManufacturer.Sharp);
            Console.ReadLine();
        }
    }
}

実行結果

0
1
2
3
4

0, 1 2…4と順番に出力されました。

enmuをオーバーライドしてみる

列挙体の数値はオーバーライドできるので、以下のように個別に定義することも可能です。

列挙体を個別の数値で定義

enum SmartPhoneManufacturer
{
    Apple = 1,
    Google,
    Sony = 80,
    Fujitsu,
    Sharp,
}

enumの方をintから変換してみる

列挙体は何も指定していなければデフォルトはint型です。他にもlong, short, byteのみであれば定義することができます。これ以外は非推奨となっているため、例えば、char型で定義しても例外がスローされる可能性が高いので注意が必要です。

enumをbyteで定義するコード

enum SmartPhoneManufacturer : byte
{
    Apple = 0x01,
    Google,
    Sony,
    Fujitsu = 0xdd,
    Sharp,
}

そのまま順番に値を出力すると結果は以下になります。

実行結果

1
2
3
221
222

foreachを使って列挙体の要素を全出力してみる

enumで定義した要素をすべて出力したい、そんな時はforeachを使えば一発で全要素を取得することができます。

foreachを使った列挙体の全要素出力

using System;

namespace EnumTest
{
    class Program
    {
        enum SmartPhoneManufacturer:byte
        {
            Apple = 0x01,
            Google,
            Sony,
            Fujitsu = 0xdd,
            Sharp,
        }

        static void Main(string[] args)
        {

            foreach(string m in Enum.GetNames(typeof(SmartPhoneManufacturer)))
            {
                Console.WriteLine(m);
            }

            Console.ReadLine();
        }
    }
}

実行結果

Apple
Google
Sony
Fujitsu
Sharp

また、Enum.GetValuesを使うことで値もすべて取り出すことができます。

foreachを使った列挙体の全値出力

using System;

namespace EnumTest
{
    class Program
    {
        enum SmartPhoneManufacturer:byte
        {
            Apple = 0x01,
            Google,
            Sony,
            Fujitsu = 0xdd,
            Sharp,
        }

        static void Main(string[] args)
        {

            foreach(byte m in Enum.GetValues(typeof(SmartPhoneManufacturer)))
            {
                Console.WriteLine(m);
            }

            Console.ReadLine();
        }
    }
}

実行結果

1
2
3
221
222

Enumを使用する際の注意点

列挙型は定数となるため、enumの値はコンパイル時に定数に置き換えられます

const定義したものと同様に、enumに変更を加えた場合、そのenumを参照しているアセンブリなども再コンパイルする必要が生じます。

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる