public static TArrayType CreateArrayInitializedWithEmptyStrings<TArrayType>(
params int[] dimensionLengths) where TArrayType : class
{
var dimensions = dimensionLengths.Select(l => Enumerable.Range(0, l));
var array = Array.CreateInstance(typeof(string), dimensionLengths);
foreach (var indices in CartesianProduct(dimensions))
array.SetValue(string.Empty, indices.ToArray());
return (array as TArrayType);
}