public static TResult[,] ConvertAll <TSource, TResult>( this TSource[,] array, Converter <TSource, TResult> converter) { Contracts.Requires.That(array != null); Contracts.Requires.That(converter != null); var result = array.GetDimensions().CreateArray <TResult>(); foreach (var pair in array.GetIndexValuePairs()) { result[pair.Key.X, pair.Key.Y] = converter(pair.Value); } return(result); }