<p>Is it possible to somehow mark a <code>System.Array</code> as immutable.  When put behind a public-get/private-set they can't be added to, since it requires re-allocation and re-assignment, but a consumer can still set any subscript they wish:</p>

<pre><code>public class Immy
{
    public string[] { get; private set; }
}
</code></pre>

<p>I thought the <code>readonly</code> keyword might do the trick, but no such luck.</p>

I believe best practice is to use
```
IList<>
```
rather than arrays in public APIs for this exact reason.
readonly
will prevent a member variable from being set outside of the constructor, but as you discovered, won't prevent people from assigning elements in the array.
See Eric Lippert's article
Arrays Considered Somewhat Harmful
for more information.
Edit:
Arrays can't be read only, but they can be converted to read-only IList implementations via
```
Array.AsReadOnly()
```
as @shahkalpesh points out.