Share via


Usar expressão de coleção para Create() (IDE0303)

Property valor
ID da regra IDE0303
Título Usar expressão de coleção para Criar
Categoria Estilo
Subcategoria Regras de idioma (preferências no nível da expressão)
Línguas aplicáveis C# 12+
Opções dotnet_style_prefer_collection_expression

Descrição geral

Esta regra sinaliza locais onde um método ou um Create() método semelhante designado como método de construção de coleção (usando o CollectionBuilderAttribute atributo) é usado para inicializar uma coleção e oferece para substituí-la por uma expressão de coleção ([...]).

Create() métodos são comuns para as coleções imutáveis, por exemplo, ImmutableArray.Create(1, 2, 3).

Nota

Esta regra requer versões mais recentes das APIs imutáveis (por exemplo, System.Collections.Immutable), que optam pelo padrão collection-expression.

Opções

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

dotnet_style_prefer_collection_expression

Property valor Description
Nome da opção dotnet_style_prefer_collection_expression
Valores de opção true | when_types_exactly_match Prefira usar expressões de coleção somente quando os tipos corresponderem exatamente, por exemplo, ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);.
when_types_loosely_match
(.NET 9 e versões posteriores)*
Prefira usar expressões de coleção mesmo quando os tipos correspondem vagamente, por exemplo, IEnumerable<int> i = ImmutableArray.Create(1, 2, 3);. O tipo visado deve corresponder ao tipo do lado direito ou ser um dos seguintes tipos: IEnumerable<T>, , , , IReadOnlyCollection<T>ICollection<T>IList<T>IReadOnlyList<T>.
false | never Desativa 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 de código quando essa opção é usada pode alterar a semântica do seu código.

Exemplo

// Code with violations.
ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);
IEnumerable<int> j = ImmutableArray.Create(1, 2, 3);

// Fixed code.
ImmutableArray<int> i = [1, 2, 3];
IEnumerable<int> j = [1, 2, 3];

O trecho de código a seguir mostra um exemplo com um tipo personalizado anotado com CollectionBuilderAttribute.

public class Program
{
    public static void Main()
    {
        // IDE0303 violation.
        MyCollection<int> c = MyCollection.Create(1, 2, 3);

        // IDE0303 fixed code.
        MyCollection<int> c = [1, 2, 3];
    }
}

static partial class MyCollection
{
    public static MyCollection<T> Create<T>(System.ReadOnlySpan<T> values) => default;
    public static MyCollection<T> Create<T>(T t1, T t2, T t3) => default;
}

[CollectionBuilder(typeof(MyCollection), "Create")]
class MyCollection<T> : IEnumerable<T>
{
    public IEnumerator<T> GetEnumerator() => default;
    IEnumerator IEnumerable.GetEnumerator() => default;
}

Suprimir um aviso

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

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

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

[*.{cs,vb}]
dotnet_diagnostic.IDE0303.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, consulte Como suprimir avisos de análise de código.

Consulte também