Enum is Reference Type or Value Type?

.NetEnumsValue TypeReference Type

.Net Problem Overview


I used Enum property in my EntityFramework 5 class, but in the database this field is nullable. Visual studio gives the error that this property must be a nullable property. My question is: is Enum a reference type or a value type?

.Net Solutions


Solution 1 - .Net

System.Enum is a reference type, but any specific enum type is a value type. In the same way, System.ValueType is a reference type, but all types inheriting from it (other than System.Enum) are value types.

So if you have an enum Foo and you want a nullable property, you need the property type to be Foo?.

Solution 2 - .Net

If you do myEnum.SomeValue it will be a value type.

Solution 3 - .Net

suppose we have enum

public enum eCategory
{
	health ,		
	Weapon
}

and a type of eCategory such as :-

eCategory currentcategory;

then currentcategory is of value type

Solution 4 - .Net

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

If enums are by reference, changing b affects a
Console.Write(a); → one
Console.Write(b); → three

a great online tool for cSharp => http://csharppad.com/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1318951View Question on Stackoverflow
Solution 1 - .NetJon SkeetView Answer on Stackoverflow
Solution 2 - .NetfhnaseerView Answer on Stackoverflow
Solution 3 - .NetEklavyaaView Answer on Stackoverflow
Solution 4 - .NetSAmView Answer on Stackoverflow