列挙型があります
string name;
public enum Color
{
Red,
Green,
Yellow
}
ロード時にNULLに設定する方法。
name = "";
Color color = null; //error
編集:私の悪い、私はそれを適切に説明しませんでした。しかし、nullableに関連するすべての答えは完璧です。私の状況は、名前などのような他の要素を持つクラスの列挙型の取得/設定がある場合です。ページの読み込み時にクラスを初期化し、値を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クラス内および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;
または、enumの最初の値(別名0)をデフォルト値にすることで、nullにできないenumの標準的な手法を使用します。たとえば、色がNoneの場合。
public Color myColor = Color.None;
これがC#の場合、機能しません。列挙型は値型であり、null
にはできません。
通常のオプションは、None
メンバーを追加することです。
public enum Color
{
None,
Red,
Green,
Yellow
}
Color color = Color.None;
...またはNullable
を使用するには:
Color? color = null;
変数をヌル可能にします。のような:
Color? color = null;
または
Nullable<Color> color = null;
列挙型は、C#の「値」型です(つまり、列挙型は、値自体が格納されているメモリ内の場所への参照としてではなく、値として格納されます)。値型をnullに設定することはできません(nullは参照型にのみ使用されるため)。
つまり、組み込みのNullable<T>
クラスを使用すると、値の型をラップしてnullに設定し、HasValue
かどうかを確認して、実際のValue
を取得できます。 (これらは両方ともNullable<T>
オブジェクトのメソッドです。
name = "";
Nullable<Color> color = null; //This will work.
使用できるショートカットもあります。
Color? color = null;
それはNullable<Color>
と同じです。
ここではC++を想定しています。 C#を使用している場合、答えはおそらく同じですが、構文は少し異なります。 enumはint値のセットです。オブジェクトではないため、nullに設定しないでください。何かをnullに設定するということは、オブジェクトを指すポインターをポイントしてゼロをアドレス指定することを意味します。あなたは本当にintでそれを行うことはできません。 intでやりたいことは、通常は持っていない値に設定することです。そうすれば、値が適切かどうかをtelに伝えることができます。したがって、色を-1に設定します
Color color = -1;
または、1からenumを開始し、ゼロに設定できます。現在のように色をゼロに設定すると、列挙型で赤がゼロになるため、「赤」に設定されます。
そう、
enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;