您可以更改方法以使用 C# 泛型 并使用描述性函数和变量名称。除了值类型避免使用 boxing 之外,这基本上会导致相同的行为。
public static void SaveArrayAsCSV<T>(T[] arrayToSave, string fileName)
{
using (StreamWriter file = new StreamWriter(fileName))
{
foreach (T item in arrayToSave)
{
file.Write(item + ",");
}
}
}
编辑:对锯齿状数组做同样的事情(假设它们只包含 一个 级别的嵌套)你可以使用这个重载(不推荐,见下文!) :
public static void SaveArrayAsCSV<T>(T[][] jaggedArrayToSave, string fileName)
{
using (StreamWriter file = new StreamWriter(fileName))
{
foreach (T[] array in jaggedArrayToSave)
{
foreach (T item in array)
{
file.Write(item + ",");
}
file.Write(Environment.NewLine);
}
}
}
编辑 - 关于重复:
当然,上述解决方案是次优的,因为它只适用于某些特定场景(我们只有一层嵌套)。不幸的是,如果重构我们的代码,我们必须停止使用泛型,因为我们的输入数组现在可能包含类型 T 或类型 T[] 的元素。因此,我们提出了以下代码,这是首选解决方案,因为尽管它重新引入了装箱,但可读性更高、冗余更少,并且适用于更广泛的场景:
public static void SaveArrayAsCSV(Array arrayToSave, string fileName)
{
using (StreamWriter file = new StreamWriter(fileName))
{
WriteItemsToFile(arrayToSave, file);
}
}
private static void WriteItemsToFile(Array items, TextWriter file)
{
foreach (object item in items)
{
if (item is Array)
{
WriteItemsToFile(item as Array, file);
file.Write(Environment.NewLine);
}
else file.Write(item + ",");
}
}