How to modify a readonly field in a value-type after construction
<p>From C# 4.0 Section 7.5.5.</p>

<blockquote>
  <p>If M is an instance fuction member declared in a value-type:</p>
  
  <ul>
  <li>[...]</li>
  <li>If E is not classified as a variable, then a temporary local variable of E's type is created and the value of E is assigned to the
  variable.  E is then reclassified as a reference to that temporary
  local variable.  The temporary variable is accessible as this within
  M, but not in any other way.  Thus, only when E is a <strong>true variable</strong>
  (<em>what is a true variable...?</em>) is it possible for the caller to observe the changes that
  M makes to this.</li>
  </ul>
</blockquote>

<p>Eric Lippert goes on to say:</p>

<blockquote>
  <p>This point illustrates yet another way in which the combination of
  mutability and copy-by-value semantics can lead to trouble.  For
  example, a readonly field is not classified as a variable after the
  constructor runs.  Therefore, an attempt to call a method that mutates
  the contents of a readonly field of a value type succeeds but actually
  mutates a copy!  Avoid these problems by avoiding mutable value types
  altogether.</p>
</blockquote>

<p>How can I reproduce the scenerio described by Eric?  I tried the following. It Errors out as I would expect:</p>

<pre><code>    struct A
    {
        public readonly int mutableReadonlyField;

        public A(int originalValue)
        {
            mutableReadonlyField = originalValue;
        }

        public A MethodThatMutatesTheContentsOfAReadOnlyField(int mutate)
        {            
            this.mutableReadonlyField = mutate;//Constructor has run so mutableReadonlyField is a temporary local variable
            //ERROR: A readonly field cannot be assigned to (except in a constructor or a variable initializer)

            A newA = this;//Is this a true variable?
            return newA;
        }
}
</code></pre>
