Usar expressões ou inicializadores de coleção (IDE0028)

Propriedade Valor
ID da regra IDE0028
Título Usar inicializadores de coleção
Categoria Estilo
Subcategoria Regras de linguagem (preferências no nível de expressão)
Linguagens aplicáveis C# e Visual Basic
Opções dotnet_style_collection_initializer
dotnet_style_prefer_collection_expression

Visão geral

Essa regra de estilo diz respeito ao uso de inicializadores de coleção e, se você estiver usando C# 12 ou posterior, expressões de coleção para inicialização de coleção.

No .NET 8 (C# 12) e versões posteriores, a opção dotnet_style_prefer_collection_expression estiver definida como true, o fixador de código no Visual Studio converte o código de inicialização da coleção para usar uma expressão de coleção (List<int> list = [1, 2, 3];). No Visual Basic e no .NET 7 (C# 11) e versões anteriores, o fixador de código converte seu código para usar um inicializador de coleção (List<int> list = new List<int> { 1, 2, 3 };).

Observação

Se você usar o fixador de código no Visual Studio, a alteração oferecida pode ter semântica diferente em alguns casos. Por exemplo, int[] x = new int[] { } é substituído por int[] x = []; que tem semântica ligeiramente diferente — o compilador usa um singleton para x em vez de criar uma nova instância.

Opções

Defina o valor da opção associada a essa regra para especificar se os inicializadores de coleção e as expressões de coleção serão preferenciais ao inicializar as coleções.

Para obter mais informações sobre como configurar as opções, consulte Formato da opção.

dotnet_style_collection_initializer

Propriedade Valor Descrição
Nome da opção dotnet_style_collection_initializer
Valores da opção true Prefira usar inicializadores de coleção.
false Não prefira inicializadores de coleção.
Valor da opção padrão true

dotnet_style_prefer_collection_expression (somente C#)

Propriedade Valor Descrição
Nome da opção dotnet_style_prefer_collection_expression
Valores da opção true Prefira usar expressões de coleção.
false Não prefira expressões de coleção.
Valor da opção padrão true

Exemplos

// IDE0028 violation.
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);

// Fixed code (with dotnet_style_prefer_collection_expression = true)
List<int> list = [1, 2, 3];
' IDE0028 violation.
Dim list = New List(Of Integer)
list.Add(1)
list.Add(2)
list.Add(3)

' Fixed code.
Dim list = New List(Of Integer) From {1, 2, 3}
// IDE0028 violation.
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);

// Fixed code.
List<int> list = new List<int>
{
    1,
    2,
    3
};
// IDE0028 violation.
List<int> list = new List<int>();
list.Add(1);
list.AddRange(new[] { 5, 6, 7 });

// Fixed code.
List<int> list = [1, .. new[] { 5, 6, 7 }];
' IDE0028 violation.
Dim list = New List(Of Integer)
list.Add(1)
list.Add(2)
list.Add(3)

' Fixed code.
Dim list = New List(Of Integer) From {1, 2, 3}

Suprimir um aviso

Se você quiser suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite a regra.

#pragma warning disable IDE0028
// The code that's violating the rule is on this line.
#pragma warning restore IDE0028

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.IDE0028.severity = none

Para desabilitar todas as regras de estilo de código, defina a severidade da categoria Style como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Confira também