title: Better way to express an array property
body: <p>Consider the array property:</p>
  
  <pre><code>private object m_value;
  public string[,] StringArray 
  {
      get { return ValueToStrings(m_value); }
      set { m_value = StringsToValue(value); } 
  }
  </code></pre>
  
  <p>You will see that this is incredibly wrong when you try to use the property like this:</p>
  
  <pre><code>StringArray[0, 0] = "2";
  MessageBox.Show(StringArray[0, 0]);
  </code></pre>
  
  <p>Because the array is computed each time it is accessed, the assignment is only affecting a very transient piece of data and you get a fresh unchanged value when you access StringArray[0, 0] again.</p>
  
  <p>What would be a better design to make the property look like an array/matrix but actually affect underlying data when a single element is set?</p>