This will break lots of existing code and cause more issues than the two we already have.
To me, this is the only valid objection, as this is - of course - a breaking change.
not to mention any decent C# dev will know that modifying value types that have been copied into methods won't change it outside of the method. Or a quick google search will bring this up.
This logic perplexes me. So, if any "decent dev knows" / "it is easy to google for" how 'abc' works, so why not keep forcing the user to use 'def' instead, which is tons more error-prone.
How so? It doesn't force them to use the non-default constructor and all non-default constructors initialize everything with default values.
Look for example as the link why got me to create this post at the very top.
It _is_ easy to overlook.
Edit: removed links to constructor chaining and intialization syntax, since zsbzsb was talking about time of creation of the type. My bad.
Making structs immutable will require us to now provide every single possible constructor
Just think of vectors, to change a vector's value you will now need to create a new vector every single time you want to modify it instead of just changing the existing value.
Thats were Properties in C# come in.
The majority of books on this subject suggest to implement _all_ public members (with exception for public static or read-only value types or ReadOnlyCollections) as Properties.
Not only will they allow total control of access on the underlaying value, also modifying the logic when accessing its value will never be a breaking change for existing code.
And you don't need to worry for performance either. ValueTypes are extremely light-weight, and if used locally they are created on the stack even. Now will replacing the fields by properties be a performance drawback in Release builds, since the properties will be inlined.