1. Declaração de um matriz
  2. Acessando/alterando elementos
  3. Dimensões de uma matriz
  4. Percorrendo uma matriz
  5. Copiando uma matriz
  6. Comparando matrizes
  7. Parâmetro/argumento e retorno
  8. Iniciar matriz com elementos repetidos
  9. Métodos

Matriz ou vetor bidimensional, são vetores contido dentros de vetores. Suas dimensões podem ser vistas como linhas e colunas que armazenazem elementos justapostos.

Tab. 1: Matriz de int
L/C 0 1 2
0 10 20 30
1 40 50 60
2 70 80 90

As matrizes mencionadas nesta parte do tutorial dizem respeito à matrizes estáticas irregulares([][]) e regulares([,]). As operações mais complexas que envolvem vetores, devem ser realizadas utilizando os métodos da classe Array.

A declaração de uma matriz na linguagem C#, utilizamos um tipo de dado deseja para uma variável e suas dimensões entre [ e ], que lembra a sintaxe utilizada nas linguagens C e C++.

Sintaxe: Matriz Iniciada
tipo_dado[][] nome_matriz = [[elementos_linha1],[elementos_linhaN]]; //irregular

tipo_dado[,] nome_matriz = {{elementos_linha1},{elementos_linhaN}};
Sintaxe: Espaço reservado
tipo_dado[,] nome_matriz = new tipo_dado[<linhas>, <colunas>]; //regular

tipo_dado[][] nome_matriz = new tipo_dado[<linhas>][]

Um matriz com valores iniciados devem ter seus valores delimitados por { ou [ e } ou ] , separados por (,) e terminados com (;):

Exemplo 1
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int[,] m1 = {{1,2},{2,3}};
        int[,] m2 = new int[2,2]; //espaço reservado
		
		int[][] m3 = [[1,2],[2,3]];
        int[][] m4 = new int[2][]; //espaço reservado
    }
}
Saída
-

O acesso aos elementos de uma matriz é feito utilizando suas as linhas e colunas que são passados como argumentos para o indexador [,] ou [][], como pode ser visto na sintaxe abaixo:

Sintaxe: regular
nome_matriz[<linha>, <coluna>] = valor; //atribuir

tipo_dado nome_matriz[<linha>, <coluna>]; //acessar
Sintaxe: irregular
nome_matriz[<linha>][<coluna>] = valor; //atribuir

tipo_dado nome_matriz[<linha>][<coluna>]; //acessar
Exemplo 2
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int[,] m1 = {{1,2},{2,3}};
		Console.WriteLine(m1[0,0]);
		
		int[][] m3 = [[1,2],[2,3]];
		Console.WriteLine(m3[0][0]);		
    }
}
Saída
1

Como uma matriz é um vetor de vetores, utilizando o método GetLength que recebe o índice da dimensão a qual queremos descobrir o seu número de elementos. Outra forma é utilizando a prppriedade Rank que retorna o número de dimensões.

Sintaxe
int nome_matriz.GetLength(<numero_dimensao>);

int nome_matriz.Rank;
Exemplo 3
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int[,] m1 = {{1,2},{2,3}};
        
        Console.WriteLine(m1.GetLength(0));
        Console.WriteLine(m1.GetLength(1));
        
        Console.WriteLine(m1.Rank);
    }
}
Saída
2
2
2

Para iterarmos ou percorrermos uma matriz em C#, podemos utilizar o comando for que foi estudado em C# Básico: Comandos de Repetição.

Exemplo 4
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int[,] m1 = {{1,2},{2,3}};
        
        for( int i=0; i < m1.GetLength(0); i++)
        {
            for( int j=0; j < m1.GetLength(1); j++)
            {
                Console.Write(m1[i,j]);
                Console.Write(" ");
            }
            Console.WriteLine();
        }
    }
}
Saída
1 2 
3 2 

A forma mais básica para copiar o conteúdo de um vetor é utilizando o comando for. O método Copy da classe array também pode ser utilizado.

Sintaxe
Array.copyOf(first,second, qtd)
Exemplo 5
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        int[,] m1 = {{1,2},{2,3}};
        int[,] m2 = new int[2][2];
        
        for( int i=0; i < m1.GetLength(0); i++)
        {
            for( int j=0; j < m1.GetLength(1); j++)
            {
                m2[i,j] = m1[i,j];
            }
        }
    }
}
Saída
-

Existem outras formas para copiar de matrizes, porém essas serão vistas em futuras atualizações.

  1. 07/08/2025 - revisão 2 - Ajustes: pontuais, links internos e sintaxes; Adição: matrizes 'irregulares'
  2. 14/10/2024 - revisão 1 - Correção: link 'Próximo', Sintaxe Ex. 2; Ajustes pontuais
  3. 07/03/2024 - versão inicial