with a List<List<sometype>> you can have a dynamic array in both dimensions and use the two dimensional index operation and are better typed
Then there are beautiful things called extension methods. You put these public static methods in public static classes and mark the first parameter with the "this" keyword so any objec within it's scope looks at it as a member value. Example
Code:
public static class Extensions
{
public static int Get2d(this List<Array> x, i1, i2) //this indicates implicit parameter
{
//bounds checking perhaps
return (int)x[i1].GetValue(i2);
}
}
now you can call it as such
See you're calling the Get2d method, but without passing the list as the first parameter, all List<Array>s sees it as a member method.