title: How to make += operator keep the object reference?
body: <p>Say, I have a class:</p>
  
  <pre><code>class M
  {
       public int val; 
  </code></pre>
  
  <p>And also a <code>+</code> operator inside it:</p>
  
  <pre><code>    public static M operator +(M a, M b)
      {
          M c = new M();
          c.val = a.val + b.val;
          return c;
      }
  }
  </code></pre>
  
  <p>And I've got a <code>List</code> of the objects of the class:</p>
  
  <pre><code>List&lt;M&gt; ms = new List();
  M obj = new M();
  obj.val = 5;
  ms.Add(obj);
  </code></pre>
  
  <p>Some other object:</p>
  
  <pre><code>M addie = new M();
  addie.val = 3;
  </code></pre>
  
  <p>I can do this:</p>
  
  <pre><code>ms[0] += addie;
  </code></pre>
  
  <p>and it surely works as I expect - the value in the list is changed. But if I want to do</p>
  
  <pre><code>M fromList = ms[0];
  fromList += addie;
  </code></pre>
  
  <p>it doesn't change the value in <code>ms</code> for obvious reasons.</p>
  
  <p>But intuitively I expect <code>ms[0]</code> to also change after that. Really, I pick the object from the list and then I increase it's value with some other object. So, since I held a reference to <code>ms[0]</code> in <code>fromList</code> before addition, I want still to hold it in <code>fromList</code> after performing it.</p>
  
  <p>Are there any ways to achieve that?</p>