I have an enum
string name;
public enum Color
{
Red,
Green,
Yellow
}
How to set it to NULL on load.
name = "";
Color color = null; //error
Edited: My bad, I didn't explain it properly. But all the answers related to nullable is perfect. My situation is What if, I have get/set for the enum in a class with other elements like name, etc. On page load I initiallize the class and try to default the values to null. Here is the scenario (Code is in 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; //???
}
}
}
Then using the suggestions below I changed the above code to make it work with get and set methods. I just need to add "?" in EnumTest class during declaration of private enum variable and in get/set method:
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; }
}
}
Thanks all for the lovely suggestions.
An enum is a "value" type in C# (means the the enum is stored as whatever value it is, not as a reference to a place in memory where the value itself is stored). You can't set value types to null (since null is used for reference types only).
That being said you can use the built in Nullable<T>
class which wraps value types such that you can set them to null, check if it HasValue
and get its actual Value
. (Those are both methods on the Nullable<T>
objects.
name = "";
Nullable<Color> color = null; //This will work.
There is also a shortcut you can use:
Color? color = null;
That is the same as Nullable<Color>
;
If this is C#, it won't work: enums are value types, and can't be null
.
The normal options are to add a None
member:
public enum Color
{
None,
Red,
Green,
Yellow
}
Color color = Color.None;
...or to use Nullable
:
Color? color = null;
would it not be better to explicitly assign value 0 to
None
constant? Why?
Because default enum
value is equal to 0, if You would call default(Color)
it would print None
.
Because it is at first position, assigning literal value 0 to any other constant would change that behaviour, also changing order of occurrence would change output of default(Color)
(https://stackoverflow.com/a/4967673/8611327)
Make your variable nullable. Like:
Color? color = null;
or
Nullable<Color> color = null;
Color? color = null;
or you can use
Color? color = new Color?();
example where assigning null wont work
color = x == 5 ? Color.Red : x == 9 ? Color.Black : null ;
so you can use :
color = x == 5 ? Color.Red : x == 9 ? Color.Black : new Color?();
I'm assuming c++ here. If you're using c#, the answer is probably the same, but the syntax will be a bit different. The enum is a set of int values. It's not an object, so you shouldn't be setting it to null. Setting something to null means you are pointing a pointer to an object to address zero. You can't really do that with an int. What you want to do with an int is to set it to a value you wouldn't normally have it at so that you can tel if it's a good value or not. So, set your colour to -1
Color color = -1;
Or, you can start your enum at 1 and set it to zero. If you set the colour to zero as it is right now, you will be setting it to "red" because red is zero in your enum.
So,
enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;
Source: Stackoverflow.com