1. ホーム
  2. c#

[解決済み】enumにnullを設定する方法

2022-04-08 12:25:52

質問

enumがあります。

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}

ロード時にNULLにする方法。

name = "";
Color color = null; //error

編集しました。 私のミスです、ちゃんと説明してませんでした。しかし、nullableに関連するすべての回答は完璧です。私の状況は、もし私が、nameなどの他の要素を持つクラスでenumのget/setを持っているとしたらどうでしょう。ページロード時に、私はクラスを初期化し、値をnullにデフォルトしようとします。以下は、そのシナリオです(コードはC#です)。

namespace Testing
{
    public enum ValidColors
    {
        Red,
        Green,
        Yellow
    }

    public class EnumTest
    {
        private string name;
        private ValidColors myColor;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public ValidColors MyColor
        {
            get { return myColor; }
            set { myColor = value; }
        }

    }

    public partial class _Default : System.Web.UI.Page
    {       
        protected void Page_Load(object sender, EventArgs e)
        {
            EnumTest oEnumTest = new EnumTest();
            oEnumTest.Name = "";
            oEnumTest.MyColor = null; //???
        }
    }

}

そして、以下の提案を参考に、上記のコードをgetとsetメソッドで動作するように変更しました。EnumTestクラスで、プライベートenum変数の宣言とget/setメソッドに"?"を追加するだけでいいんです。

public class EnumTest
{
    private string name;
    private ValidColors? myColor; //added "?" here in declaration and in get/set method

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public ValidColors? MyColor
    {
        get { return myColor; }
        set { myColor = value; }
    }

}

素敵な提案をありがとうございました。

解決方法は?

null可能な型には、"?" 演算子を使用することができます。

public Color? myColor = null;

あるいは、列挙型の最初の値 (別名 0) をデフォルト値とすることで、null を指定できない列挙型の標準的な手法を使用します。例えば、色 None の場合。

public Color myColor = Color.None;