According to all known laws of the in parameter modifier, any object passed will be passed by reference BUT be unable to be modified by the called method.
So I find this advice by Microsoft on How to write safe and efficient C# code confusing:
Declare a readonly struct to express that a type is immutable. That enables the compiler to save defensive copies when using in parameters.
Never pass a struct as an in parameter unless it's declared with the readonly modifier or the method calls only readonly members of the struct. Violating this guidance may negatively affect performance and could lead to an obscure behavior.
Why would the compiler save a defensive copy when using an "in" parameter if the method isn't allowed to modify it, anyway?
How can passing a non-readonly struct as an in parameter negatively affect performance and lead to an obscure behavior if the method isn't allowed to modify it?