Как установить перечисление в null
У меня есть перечисление
string name;
public enum Color
{
Red,
Green,
Yellow
}
Как установить его в NULL при загрузке.
name = "";
Color color = null; //error
Отредактировано:
Мой плохой, я не объяснил это должным образом. Но все ответы, связанные с nullable, идеальны. Моя ситуация. Что, если у меня есть/задано для перечисления в классе с другими элементами, такими как имя и т.д. На загрузке страницы я инициализирую класс и попытаюсь по умолчанию присвоить значения null. Вот сценарий (код находится в С#):
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 private и в методе 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; }
}
}
Спасибо всем за прекрасные предложения.
Ответы
Ответ 1
Вы можете использовать "?" оператор для типа NULL.
public Color? myColor = null;
Или используйте стандартную практику для перечислений, которая не может быть нулевой, если значение FIRST в перечислении (aka 0) является значением по умолчанию. Например, в случае цвета Нет.
public Color myColor = Color.None;
Ответ 2
Если это С#, это не сработает: перечисления являются типами значений и не могут быть null
.
Обычными параметрами являются добавление члена None
:
public enum Color
{
None,
Red,
Green,
Yellow
}
Color color = Color.None;
... или использовать Nullable
:
Color? color = null;
Ответ 3
Сделайте свою переменную нулевой. Как:
Color? color = null;
или
Nullable<Color> color = null;
Ответ 4
Перечисление - это тип значения в С# (означает, что перечисление хранится как любое значение, а не как ссылка на набор значений). Вы не можете устанавливать типы значений в значение null (поскольку значение null используется только для ссылочных типов).
Считаем, что вы можете использовать встроенный класс Nullable<T>
, который переносит типы значений, чтобы вы могли установить их в null, проверить, есть ли это HasValue
и получить его фактическое Value
. (Это оба метода для объектов Nullable<T>
.
name = "";
Nullable<Color> color = null; //This will work.
Существует также ярлык, который вы можете использовать:
Color? color = null;
То же, что и Nullable<Color>
;
Ответ 5
Я предполагаю С++ здесь. Если вы используете С#, ответ, вероятно, тот же, но синтаксис будет немного другим.
Перечисление представляет собой набор значений int. Это не объект, поэтому вы не должны устанавливать его в null. Установка значения в нуль означает, что вы указываете указатель на объект для обращения к нулю. Вы не можете сделать это с помощью int. То, что вы хотите сделать с int, состоит в том, чтобы установить его на значение, которое обычно не было бы у вас, чтобы вы могли поместить его, если это хорошее значение или нет.
Итак, установите свой цвет на -1
Color color = -1;
Или вы можете начать перечисление в 1 и установить его на ноль. Если вы установите цвет на ноль, как сейчас, вы установите его на "красный", потому что красный нуль в вашем перечислении.
Итак,
enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;