我目前正在处理大量的数组,并为了调试目的编写了一个通用的Print()
方法,用于打印不同类型的数组。
static void Main()
{
Print(new double[]{ 1, 2, 3 });
// Output: [ 1, 2, 3 ]
}
static void Print<T>(T[] array)
{
int size = array.Length;
if (size == 0)
return;
string str = "[ ";
for (int i = 0; i < size; i++)
{
str += array[i].ToString();
if (i < size - 1)
str += ", ";
}
str += " ]";
Console.WriteLine(str);
}
目前为止都很好用。然后我想打印一个数组的数组,比如double[][]
,尝试了以下代码:
static void Main()
{
Print(new double[][]
{
new double[] { 1, 2 },
new double[] { 3, 4 },
new double[] { 5, 6 },
});
// Output: [ 1, 2 ]
// [ 3, 4 ]
// [ 5, 6 ]
}
static void Print<T>(T[] array)
{
if (array.Length == 0)
return;
if (array[0].GetType().IsArray)
{
foreach (var element in array)
{
Print<T>(element);
}
}
else
{
int size = array.Length;
string str = "[ ";
for (int i = 0; i < size; i++)
{
str += array[i].ToString();
if (i < size - 1)
str += ", ";
}
str += " ]";
Console.WriteLine(str);
}
}
我只是想检查一下
array
的元素是否再次是数组,如果是,我会为array
的每个element
再次调用函数Print。但是Print(element)
不起作用,因为element
是类型T
而不是T[]
,我不知道如何告诉编译器在这种情况下T
是一个数组。我该怎么做才能让它工作?
double[][]
和double[,]
)。你需要同时支持两种吗?还是你只处理数组数组(即不规则数组)?在这里查看更多信息:https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays - Jamiec