Compartilhar via


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

Propriedade Valor
ID da regra IDE0028
Título Use 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, se você tiver a opção dotnet_style_prefer_collection_expression definida como true, a correção de código no Visual Studio converterá 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, a correção de código converte o código para usar um inicializador de coleção (List<int> list = new List<int> { 1, 2, 3 };).

Observação

Se você usar a correção de código no Visual Studio, a alteração que ele oferece poderá ter a 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 das opções 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

Propriedade Valor Descrição
Nome da opção dotnet_style_prefer_collection_expression
Valores das opções true | when_types_exactly_match Prefira usar expressões de coleção somente quando os tipos corresponderem exatamente, por exemplo, List<int> list = new List<int>() { 1, 2 };.
when_types_loosely_match* Prefira usar expressões de coleção mesmo quando os tipos não coincidirem exatamente, por exemplo, IEnumerable<int> list = new List<int>() { 1, 2 };. O tipo de destino deve corresponder ao tipo no lado direito ou ser um dos seguintes tipos: IEnumerable<T>, ICollection<T>, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>.
false | never Desabilita a regra.
Valor da opção padrão when_types_loosely_match*

*Quando essa opção é usada, a correção de código pode alterar a semântica do código.

(Essa opção se aplica somente a C#.)

Exemplos

// IDE0028 violation.
List<int> list = new List<int>() { 1, 2, 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}

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