What you describe are general limitations.
Where T: New () ==> the general parameter must be class +, by default empty Constructor
No, it just says: "The type argument must have a constructor without parameters." This actually includes all types of values. Even if you could not declare your own constructors without parameters for structures prior to C # 6, you can always call them. For instance:
Guid guid = new Guid();
So, if you have:
public void Foo<T>() where T : new()
this is absolutely true for calling
Foo<Guid>();
source share