Mutable structures and classes behave differently when it comes to Generics. Although such differences cause some people to deride mutable structs as evil, they simply offer different semantics from class types. Such semantics are for many purposes superior to those of class types, but some code which expects class-type semantics may be broken if given a struct
. For example, value-type entities may be implicitly cast to any implemented interface type, ValueType
, or Object. Such casts will cause the system to copy the contents of that entity to a new boxed instance; mutations performed upon that new instance will not affect any other. Personally, I think such implicit behavior is evil (there should be easy ways for struct
s to explicitly permit such implicit behavior, or for code to explicitly request boxing, but such features don't exist as of .NET 4.0).