コンテンツにスキップ

列挙型

書き方説明
public enum Mode { Off, On }列挙型の宣言
enum Code { Ok = 200, NotFound = 404 }値の明示
enum Small : byte { A = 1 }基になる型の指定
[System.Flags] enum Perm { Read = 1, Write = 2 }組み合わせ(Flags)
public Mode M;フィールドとして保持
Mode[] ms = new Mode[2];配列の要素
struct Holder { enum Mode { … } }型の中の宣言
書き方説明エラー理由代わりに
m.ToString()値の名前を文字列にするTUKI0001未定switch で名前を返すメソッドを書く
$"{m}"値の名前の文字列への埋め込みTUKI0001未定番号でよければ (int)m を埋め込む。名前が要るなら switch で名前を返すメソッドを書く
列挙型の値は整数として運ばれます。値そのものは普通に使えますが、実行時に名前を持っていないので、名前を文字列として取り出す形は通りません。

[System.Flags] が効くのは名前を出すときなので、この環境では出力が変わりません。組み合わせの | は、この印が無くても書けます。

using UnityEngine;
using Tsukimi;
public enum Mode { Off, On }
public class TyEnumDeclare : TsukimiBehaviour
{
void Start()
{
Mode m = Mode.On;
Debug.Log((int)m); // => 1
}
}
using UnityEngine;
using Tsukimi;
public enum Code { Ok = 200, NotFound = 404 }
public class TyEnumExplicit : TsukimiBehaviour
{
void Start()
{
Code c = Code.NotFound;
Debug.Log((int)c); // => 404
}
}
using UnityEngine;
using Tsukimi;
public enum Small : byte { A = 1 }
public class TyEnumUnderlying : TsukimiBehaviour
{
void Start()
{
Small s = Small.A;
Debug.Log((byte)s); // => 1
}
}

[System.Flags] を付けても、| での組み合わせ方は変わりません(書けない形)。

using UnityEngine;
using Tsukimi;
[System.Flags]
public enum Perm { None = 0, Read = 1, Write = 2 }
public class TyEnumFlags : TsukimiBehaviour
{
void Start()
{
Perm p = Perm.Read | Perm.Write;
Debug.Log((int)p); // => 3
}
}
using UnityEngine;
using Tsukimi;
public enum Mode { Off, On }
public class TyEnumField : TsukimiBehaviour
{
void Start()
{
M = Mode.On;
Debug.Log((int)M); // => 1
}
public Mode M;
}
using UnityEngine;
using Tsukimi;
public enum Mode { Off, On }
public class TyEnumArray : TsukimiBehaviour
{
void Start()
{
Mode[] ms = new Mode[2];
ms[0] = Mode.On;
Debug.Log((int)ms[0]); // => 1
}
}
using UnityEngine;
using Tsukimi;
public struct Holder { public enum Mode { Off, On } }
public class TyEnumNested : TsukimiBehaviour
{
void Start()
{
Holder.Mode m = Holder.Mode.On;
Debug.Log((int)m); // => 1
}
}