在C#中,string[][]和string[,]有什么区别?

3
语法有些不同,但它们之间有什么区别呢?
public static string[][] str1 = { new string[] { Total, "N2" }};
public static string[,] str2 = { { Total, "N2" } }; 

每种使用的指南是什么?

第一个是“jagged” - 一个数组的引用数组。 - Lyubomyr Shaydariv
6
请看这个回答 - TVOHM
3个回答

6
请看这里:https://msdn.microsoft.com/en-us/library/2s05feca.aspx 基本上,它们的区别在于内存的分配方式。 [,] 符号将会在一个块中分配所有需要的内存,而 [][] 符号将会分配指向数组的指针数组,每个数组都是单独分配的,不一定与其他数组相邻。

还要检查数组 - shadow
3
“指向数组的指针数组”,具体取决于其用法 - 其中的元素可能是未初始化的。此外,在 C# 中,“指针”一词并不常用,不应作为“引用”的同义词。 “嵌套数组是一个数组的数组,因此它的元素是引用类型,并且被初始化为 null。” - user585968

0
在你引用的例子中:
public static string[][] str1 = { new string[] { Total, "N2" }};
public static string[,] str2 = { { Total, "N2" } };

第一个是数组的数组(锯齿形数组)。每个条目可以指向一个字符串数组。

第二个是普通的二维数组(多维数组)。


0
简而言之,[,] 是一次性分配的二维数组,而 [][] 是一个数组的数组,因此内存分配是逐步进行的 - 初始化语法(正如您所指出的)也不同。
另一个重要的区别是,在 [][] 类型中,您可以定义每个“行”的不同大小。这在 [,] 中是不可能的,它在某种程度上是 C# 矩阵的表示形式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接