C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
列挙型の宣言
2021/3/14
列挙型のことを列挙体と表現する場合もあります。
一般的な列挙型の宣言
public enum BloodType
{
A,
B,
AB,
O
}
使用例
BloodType userBloodType;
userBloodType = BloodType.A;
列挙型の各値にXMLコメントを設定するとわかりやすいのでお勧めです。
public enum ShapeType
{
/// <summary>正方形・長方形</summary>
Rect,
/// <summary>円・楕円</summary>
Oval,
/// <summary>Rect以外のすべての多角形</summary>
Polygon,
/// <summary>直線</summary>
Line,
/// <summary>曲線</summary>
Curve
}
値を指定した列挙型の宣言
public enum Appearance
{
None = 0,
Fill = 1,
Border = 2,
Text = 4,
Shadow = 8
}
値を組み合わせて使う列挙型の宣言
[Flags]
public enum Appearance
{
None = 0,
Fill = 1,
Border = 2,
Text = 4,
Shadow = 8
}
メモ:値を組み合わせて使用する列挙型の各値は0からはじめ、後は1,2,4,8,16,32など 2 の n乗 にするのが無難です。
メモ:値を組み合わせて使用する列挙型の場合、名前は Appearances のように複数形にすることが多いようです。
値を組み合わせて使用する例
Appearance drawType = Appearance.Border | Appearance.Text;
//if ((drawType & Appearance.Text) == Appearance.Text) //← .NET Framework 3.5(2008年頃)以前の場合
if (drawType.HasFlag(Appearance.Text)) //← .NET Framework 4以降の場合
{
System.Diagnostics.Debug.WriteLine("Text を含んでいます。");
}
System.Diagnostics.Debug.WriteLine(drawType.ToString());
この例を実行すると次のように表示されます。
Text を含んでいます。
Border, Text
Flags属性がなくてもこのプログラムは実行可能ですが、結果は次の通りになります。
Text を含んでいます。
6
型を指定した列挙型の宣言
public enum Appearance : short
{
None = 0,
Fill = 1,
Border = 2,
Text = 4,
Shadow = 8
}
メモ:指定できるデータ型は byte, int, long, sbyte, short, uint, ulong, ushort のどれかです。型を指定しなかった場合は int になります。
参考:文字列型の列挙型のようなもの
文字列型など数値以外の型の列挙型は定義できません。似たようなものを実現するには通常の定数を利用するなどします。
public struct Nation
{
/// <summary>日本国内を対象とする場合</summary>
public const string Japan = "日本";
/// <summary>中国本土を対象とする場合</summary>
public const string China = "中華人民共和国";
/// <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
public const string USA = "アメリカ合衆国";
/// <summary>ロシア連邦を構成するすべての国家</summary>
public const string Russia = "ロシア連邦";
}
使用例
string target = Nation.USA;
System.Diagnostics.Debug.WriteLine(target);
アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所
専用の型として定義することもできます。複雑になる割には見返りが少なくお勧めではありません。
/// <completionlist cref="Nation"/>
public struct Nation
{
/// <summary>日本国内を対象とする場合</summary>
public static Nation Japan {get; set;} = new Nation("日本");
/// <summary>中国本土を対象とする場合</summary>
public static Nation China {get; set;} = new Nation("中華人民共和国");
/// <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
public static Nation USA {get; set;} =new Nation("アメリカ合衆国");
/// <summary>ロシア連邦を構成するすべての国家</summary>
public static Nation Russia {get; set;} = new Nation("ロシア連邦");
private string rawValue;
public Nation(string rawValue)
{
this.rawValue = rawValue;
}
public static implicit operator string(Nation value)
{
return value.rawValue;
}
public static implicit operator Nation(string value)
{
return new Nation(value);
}
}
使用例
Nation target = Nation.USA;
string nationName = target;
System.Diagnostics.Debug.WriteLine(nationName);
アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所
参考
列挙型 - C# リファレンス | Microsoft Docs