Array Multidimensional vs

double[][] ServicePoint = new double[10][9]; // <-- gives an error (1) double[,] ServicePoint = new double[10,9]; // <-- ok (2) 

Qual a diferença deles? (1) produz um erro, qual é o motivo?

E

 double d = new double[9] ServicePoint[0] = d; 

Usando (2) irá solicitar um erro. Por quê?

Uma é uma matriz de matrizes e uma é uma matriz 2d. O primeiro pode ser irregular, o último é uniforme.

Ou seja, um double[][] pode validamente ser:

 double[][] x = new double[5][]; x[0] = new double[10]; x[1] = new double[5]; x[2] = new double[3]; x[3] = new double[100]; x[4] = new double[1]; 

Porque cada input na matriz é uma referência a uma matriz de double . Com uma matriz irregular, você pode fazer uma atribuição a uma matriz como deseja no segundo exemplo:

 x[0] = new double[13]; 

No segundo item, porque é uma matriz 2d uniforme, você não pode atribuir uma matriz 1d a uma linha ou coluna, porque você deve indexar a linha e a coluna, o que reduz a um único double :

 double[,] ServicePoint = new double[10,9]; ServicePoint[0]... // <-- meaningless, a 2d array can't use just one index. 

ATUALIZAÇÃO :

Para esclarecer com base na sua pergunta, a razão pela qual seu # 1 teve um erro de syntax é porque você tinha isso:

 double[][] ServicePoint = new double[10][9]; 

E você não pode especificar o segundo índice no momento da construção. A chave é que o ServicePoint não é uma matriz 2d, mas uma matriz 1d (de matrizes) e, portanto, como você está criando uma matriz 1d (de matrizes), você especifica apenas um índice:

 double[][] ServicePoint = new double[10][]; 

Então, quando você cria cada item na matriz, cada um deles também são matrizes, então você pode especificar suas dimensões (que podem ser diferentes, daí o termo array irregular ):

 ServicePoint[0] = new double[13]; ServicePoint[1] = new double[20]; 

Espero que ajude!

Na primeira instância, você está tentando criar o que é chamado de matriz irregular.

 double[][] ServicePoint = new double[10][9]. 

A declaração acima teria funcionado se fosse definida como abaixo.

 double[][] ServicePoint = new double[10][] 

O que isto significa é que você está criando uma matriz de tamanho 10, que pode armazenar 10 matrizes de tamanhos diferentes dentro dela. Em termos simples, uma matriz de matrizes. Veja a imagem abaixo, que significa uma matriz irregular.

insira a descrição da imagem aqui

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.80).aspx

O segundo é basicamente um array bidimensional e a syntax é correta e aceitável.

  double[,] ServicePoint = new double[10,9];//<-ok (2) 

E para acessar ou modificar um array bidimensional, você tem que passar ambas as dimensões, mas no seu caso você está passando apenas uma dimensão, é por isso que o erro

Uso correto seria

ServicePoint[0][2] , Refere-se a um item na primeira linha, terceira coluna.

Representação pictórica de sua matriz bidimensional

insira a descrição da imagem aqui

double[][] são chamados arrays irregulares , As dimensões internas não são especificadas na declaração. Ao contrário de um array retangular , cada array interno pode ter um comprimento arbitrário. Cada matriz interna é implicitamente inicializada para nulo em vez de uma matriz vazia. Cada array interno deve ser criado manualmente: Reference [C # 4.0 in nutshell The definitive Reference]

 for (int i = 0; i < matrix.Length; i++) { matrix[i] = new int [3]; // Create inner array for (int j = 0; j < matrix[i].Length; j++) matrix[i][j] = i * 3 + j; } 

double[,] são chamados de rectangular arrays , que são declarados usando vírgulas para separar cada dimensão. O seguinte trecho de código declara uma matriz bidimensional retangular de 3 por 3, inicializando-a com números de 0 a 8:

 int [,] matrix = new int [3, 3]; for (int i = 0; i < matrix.GetLength(0); i++) for (int j = 0; j < matrix.GetLength(1); j++) matrix [i, j] = i * 3 + j; 

double[,] é uma matriz 2d (matriz) enquanto double[][] é uma matriz de matrizes ( matrizes irregulares ) e a syntax é:

 double[][] ServicePoint = new double[10][]; 

double[][] é um array de arrays e double[,] é uma matriz. Se você quiser inicializar uma matriz de matriz, você precisará fazer isso:

 double[][] ServicePoint = new double[10][] for(var i=0;i 

Leve em conta que o uso de matrizes de matrizes permitirá que você tenha matrizes de diferentes comprimentos:

 ServicePoint[0] = new double[10]; ServicePoint[1] = new double[3]; ServicePoint[2] = new double[5]; //and so on...