There is a way to create an Array with negative indexes in .NET, using this overload of Array.CreateInstance factory method, where you can specify the lower bound of the index:
public static Array CreateInstance(
Type elementType,
int[] lengths,
int[] lowerBounds
)
A 1-dimensional array with length of 10 and index starting at -10:
var a = Array.CreateInstance(typeof(string), new[] { 10 }, new[] { -10 });
a.SetValue("test", -5);
Console.WriteLine(a.GetValue(-5));
Console.WriteLine(a.GetLowerBound(0));
// yields:
// test
// -10
Also note that a 1-dimensional array with negative index lower bound cannot be cast to a vector, such as int[], which must be 0-based indexed. This kind of array is of different type than vector or 0-based indexed array:
Console.WriteLine((Array.CreateInstance(typeof(int), new[] { 1 }, new[] { -1 })).GetType());
Console.WriteLine((Array.CreateInstance(typeof(int), new[] { 1 }, new[] { 0 })).GetType());
Console.WriteLine((new int[] {}).GetType());
// yields:
// System.Int32[*]
// System.Int32[]
// System.Int32[]
(int[])Array.CreateInstance(typeof(int), new[] { 1 }, new[] { -1 })
// throws:
// System.InvalidCastException
var negativeIndexesArray = Array.CreateInstance(typeof (int), new[] {10}, new[] {-5});