Можно, но я бы лично не делал все строки одновременно - я бы использовал блок итератора:
public static IEnumerable<string> ToCSV(IEnumerable<double[]> source)
{
return source.Select(row => string.Join(",",
Array.ConvertAll(row, x=>x.ToString())));
}
Это возвращает каждую строку (тогда вызывающая сторона может WriteLine
и т. Д. Эффективно, без буферизации всего). Теперь он также может вызываться из любого источника double[]
строк (включая, помимо прочего, зубчатый массив).
Также - с локальной переменной вы можете использовать StringBuilder
, чтобы сделать каждую строку немного дешевле.
Чтобы вернуть всю строку за раз, я бы оптимизировал ее, чтобы использовать один StringBuilder
для всей работы со строками; немного длиннее, но гораздо эффективнее (гораздо меньше промежуточных строк):
public static string ToCSV(IEnumerable<double[]> source) {
StringBuilder sb = new StringBuilder();
foreach(var row in source) {
if (row.Length > 0) {
sb.Append(row[0]);
for (int i = 1; i < row.Length; i++) {
sb.Append(',').Append(row[i]);
}
}
}
return sb.ToString();
}