在c#中,对象是什么意思?
所以我从一个旧的VSTO项目中find了我的一些代码,并注意到这一点:
Excel.Worksheet sheet = Globals.ThisAddIn.Application.Worksheets["Unique Hits Per URL"]; Dictionary<int, string> ids = new Dictionary<int, string>(); object[,] cellRange = (object[,])sheet.get_Range("E:E").Cells.Value; for (int i = 1; i < cellRange.GetUpperBound(0); i++) if (cellRange[i, 1] != null) ids.Add(i, cellRange[i, 1].ToString());
在数据types上指定[,]是什么意思? 看看代码,它看起来像一个matrixfunction,但老实说,我认为C#matrix处理像记号像[] []。
object[,]
指的是一个矩形数组,这意味着它是一个网格。
然后你有object[][]
这是一个锯齿arrays,数组的数组。
主要区别在于object[,]
将始终具有固定的维度,而对于锯齿形数组( object[][]
),所有数组都可以具有不同的大小。
这是一个清楚地显示使用差异的例子(两者都是一样的):
// Create and fill the rectangluar array int[,] rectangularArray = new int[10, 20]; for (int i = 0; i < 200; i++) rectangularArray[i / 20, i % 20] = i; // Next line is an error: // int[][] jaggedArray = new int[10][20]; int[][] jaggedArray = new int[10][]; // Initialize it // Fill the jagged array for (int i = 0; i < 200; i++) { if (i % 20 == 0) jaggedArray[i / 20] = new int[20]; // This size doesn't have to be fixed jaggedArray[i / 20][i % 20] = i; } // Print all items in the rectangular array foreach (int i in rectangularArray) Console.WriteLine(i); // Print all items in the jagged array // foreach (int i in jaggedArray) <-- Error foreach (int[] innerArray in jaggedArray) foreach (int i in innerArray) Console.WriteLine(i);
编辑:
警告,这个代码不是真正的生产代码,它只是作为例子的最明显的方式。
通过/
和%
密集使用分区会使速度变慢。 你可以更好地使用嵌套的循环。
在C#中有两种不同types的“multidimensional array”。
T[,]
是一个multidimensional array 。 T[][]
是一个锯齿状的数组 。
主要区别在于它们如何存储。 multidimensional array存储为一个连续的内存块。 锯齿的数组实际上是一个数组的数组。 因此,multidimensional array只需要一个分配,每一个“行”和“列”将是相同的大小(他们总是IxJ)。
在一个锯齿状的数组中,“second”数组元素可以都是不同的长度,因为它们是单独的数组。 它存储一个引用数组,每个引用可以指向一个单独的元素数组。
也就是说,与常见的期望相反,锯齿状的数组,即使它们需要更多的内存(用于存储额外的数组引用)并且不被连续地存储在内存中,由于CLR中的某些优化,它们通常比multidimensional arrayperformance得更好。
object[,]
引用具有两个维度的对象数组。
一般来说,二维数组可以被看作是一个维表示列和另一个索引表示行的表。
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; 0 1 ------ 0 | 1 2 1 | 3 4 2 | 4 6
在这里查看有关multidimensional array的部分:
http://msdn.microsoft.com/en-us/library/aa288453(VS.71).aspx
它是一个matrix或二维数组。 MSDN文档在这里