Compartilhar via


Usar expressão de coleção para vazio (IDE0301)

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

Visão geral

Essa regra procura código semelhante a Array.Empty<T>() (uma chamada de método que retorna uma coleção vazia) ou ImmutableArray<T>.Empty (uma propriedade que retorna uma coleção vazia) e oferece para substituí-la por uma expressão de coleção ([]).

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

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 corresponderem de forma flexível, 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 de 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.

Exemplo

// Code with violations.
int[] i = Array.Empty<int>();
IEnumerable<int> j = Array.Empty<int>();
ReadOnlySpan<int> span = ReadOnlySpan<int>.Empty;

// Fixed code.
int[] i = [];
IEnumerable<int> j = [];
ReadOnlySpan<int> span = [];

O snippet de código a seguir mostra um exemplo com um tipo personalizado.

public class Program
{
    public static void Main()
    {
        // IDE0301 violation.
        MyList<int> x = MyList<int>.Empty;

        // IDE0301 fixed code.
        MyList<int> x = [];
    }
}

class MyList<T> : IEnumerable<T>
{
    public static MyList<T> Empty { get; }

    public IEnumerator<T> GetEnumerator() => default;
    IEnumerator IEnumerable.GetEnumerator() => default;
}

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, insira diretivas de pré-processamento no seu arquivo de origem para desabilitar e, em seguida, habilitar novamente a regra.

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

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

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

Para desabilitar todas as regras de estilo de código, defina a severidade da categoria Style para 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