Enum - это ссылочный тип или тип значения?

Я использовал свойство Enum в своем классе EntityFramework 5, но в базе данных это поле может быть пустым. Visual Studio выдает ошибку, что это свойство должно иметь значение NULL. Мой вопрос: является ли Enum ссылочным типом или типом значения?


person Community    schedule 28.01.2013    source источник


Ответы (4)


System.Enum — это ссылочный тип, но любой конкретный тип перечисления — это тип значения. Точно так же System.ValueType является ссылочным типом, но все унаследованные от него типы (кроме System.Enum) являются типами-значениями.

Итак, если у вас есть перечисление Foo и вы хотите свойство, допускающее значение NULL, вам нужно, чтобы тип свойства был Foo?.

person Jon Skeet    schedule 28.01.2013
comment
Стоит отметить, что Foo? является сахаром для System.Nullable<Foo> и что Nullable также является типом значения. - person Jesse C. Slicer; 17.09.2014

Если вы сделаете myEnum.SomeValue, это будет тип значения.

person fhnaseer    schedule 28.01.2013

public enum TestReferenceOrValue
{
    one, two, three    
}
var a = TestReferenceOrValue.one;
var b = a;
b = TestReferenceOrValue.three;

Если перечисления создаются по ссылке, изменение b влияет на a
Console.Write(a); → один
Console.Write(b); → три

отличный онлайн-инструмент для cSharp => http://csharppad.com/

person SAm    schedule 26.06.2016
comment
Я проголосовал за ваше отображение ошибочных соглашений о программировании. Поля Enum должны начинаться с заглавной буквы. - person Krythic; 19.10.2016
comment
Приведенный выше пример кода бесполезен, поскольку он будет действовать одинаково независимо от того, является ли TestReferenceOrValue ссылочным типом или типом значения. var a = "a"; var b = a; b = "b"; Console.Write(a); Console.Write(b); показывает, что строки (и любой другой тип) действуют таким образом, а string является ссылочным типом. Это потому, что вы переписываете переменную b, а не меняете объект, на который она указывает. - person mjwills; 16.11.2017

предположим, что у нас есть перечисление

public enum eCategory
{
    health ,        
    Weapon
}

и тип eCategory, такой как: -

eCategory currentcategory;

тогда currentcategory имеет тип значения

person Eklavyaa    schedule 20.06.2018