Usar expressão de coleção para construtor (IDE0304)

Propriedade Valor
ID da regra IDE0304
Título Usar expressão de coleção para construtor
Categoria Estilo
Subcategoria Regras de linguagem (preferências no nível de expressão)
Linguagens aplicáveis C# 12+
Opções dotnet_style_prefer_collection_expression

Visão geral

Essa regra sinaliza locais onde um CreateBuilder() ou método semelhante é chamado para criar um tipo de construtor que adiciona elementos e, finalmente, constrói um tipo de coleção que tem o atributo CollectionBuilderAttribute (por exemplo, chamando ImmutableArray<T>.Builder.ToImmutable()). Neste caso, uma expressão de coleção ([...]) pode ser usada para inicializar a coleção.

Observação

Essa regra requer versões mais recentes das APIs imutáveis (por exemplo, System.Collections.Immutable), que aceitam o padrão de expressão de coleção.

Opções

As opções especificam o comportamento que você quer que a regra imponha. Para obter informações sobre opções de configuração, consulte Formato para opções.

dotnet_style_prefer_collection_expression

Propriedade Valor Descrição
Nome da opção dotnet_style_prefer_collection_expression
Valores da opção true | when_types_exactly_match Prefira usar expressões de coleção somente quando os tipos corresponderem exatamente.
when_types_loosely_match
(.NET 9 e versões posteriores)*
Prefira usar expressões de coleção mesmo quando os tipos corresponderem de forma flexível. 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 true no .NET 8
when_types_loosely_match no .NET 9 e versões posteriores

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

Exemplo

// Code with violation.
var builder = ImmutableArray.CreateBuilder<int>();
builder.Add(1);
builder.AddRange(new int[] { 5, 6, 7 });
ImmutableArray<int> i = builder.ToImmutable();

// Fixed code.
ImmutableArray<int> i = [1, .. new int[] { 5, 6, 7 }];

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 IDE0304
// The code that's violating the rule is on this line.
#pragma warning restore IDE0304

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.IDE0304.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