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?
4 Answers
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?.
3 Comments
Jesse C. Slicer
Worth noting that
Foo? is sugar for System.Nullable<Foo> and that Nullable is also a value type.Tech Pedia
Is this the same scenario with Swift?
Jon Skeet
@TechPedia: in general, asking a question in a comment about a very different language/platform from the original question is unlikely to be helpful. A Google search of "are swift enums reference types or value types" suggests an answer pretty quickly though.
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/
2 Comments
Krythic
I downvoted for your display of erroneous programming conventions. Enum fields should start with an uppercase letter.
mjwills
The above code sample is unhelpful since it would act the same regardless of whether
TestReferenceOrValue was a reference type or value type. var a = "a"; var b = a; b = "b"; Console.Write(a); Console.Write(b); shows that strings (and every type) act that way - and string is a reference type. That is because you are overwriting the b variable, not altering the object to which it points.