Guid
is a value type. The compiler accepts new T()
for all value types T
, with exactly the same meaning as default(T)
. A value type cannot prevent this even if default(T)
is a nonsensical value for this specific type.
So, to answer your question, new Guid()
isn't allowed because it's useful, it's allowed for technical reasons only. You shouldn't ever use it. If you really want an all-zero Guid
, default(Guid)
or Guid.Empty
are far better for readability.