public static TResult[,] SelectArray <TSource, TResult>(this TSource[,] source, Func <TSource, TResult> selector) { var lengths = source.GetDimensionLengths(); var result = new TResult[lengths[0], lengths[1]]; for (int i = 0; i < lengths[0]; i++) { for (int j = 0; j < lengths[1]; j++) { result[i, j] = selector(source[i, j]); } } return(result); }