In questo post affermavo (in riferimento agli array unidimensionali non-vettori, cioè di limite inferiore diverso da zero) che:
"non è possibile accedere in modo indicizzato agli elementi dell'array (si devono utilizzare i metodi SetValue e GetValue)."
Lo si può fare invece tramite un ArrayList:
int lb = 100; // limite inferiore
int ub = 1000; // limite superiore
// int[] a = new int[lb..ub];
Array a = Array.CreateInstance(typeof(int), new int[1]{ub - lb + 1}, new int[1]{lb});
ArrayList al = ArrayList.Adapter(a);
al[111] = 1;
Console.WriteLine("al[{0}] = {1}", 111, al[111]);