Compartilhar via


Ações Rápidas Comuns

As seções neste tópico listam algumas das Ações Rápidas comuns aplicáveis ao código C# e ao Visual Basic. Essas ações são correções de código para diagnóstico de compilador ou analisadores internos da Plataforma do Compilador do .NET no Visual Studio.

Ações que corrigem erros

As Ações Rápidas nesta seção corrige erros no código que fariam com que um build falhasse. Quando as Ações Rápidas estão disponíveis para corrigir um erro em uma linha de código, o ícone exibido na margem ou abaixo do rabiscos vermelho é uma lâmpada com um 'x' vermelho.

Menu e ícone de erro ações rápidas

Corrigir símbolo ou palavra-chave com ortografia incorreta

Se você acidentalmente digitar incorretamente um tipo ou palavra-chave no Visual Studio, essa Ação Rápida a corrigirá automaticamente para você. Você verá esses itens no menu de lâmpada como "Alterar '<palavra> incorreta' para '<palavra> correta'". Por exemplo:

// Before
private viod MyMethod()
{
}

// Change 'viod' to 'void'

// After
private void MyMethod()
{
}
ID do erro Idiomas aplicáveis
CS0103, BC30002 C# e Visual Basic

Resolver conflito de mesclagem do Git

Essas Ações Rápidas permitem resolver conflitos de mesclagem do Git "fazendo uma alteração", o que remove o código e os marcadores conflitantes.

// Before
private void MyMethod()
{
    if (false)
    {

    }
}

// Take changes from 'HEAD'

// After
private void MyMethod()
{
    if (true)
    {

    }
}
ID do erro Idiomas aplicáveis Versão compatível
CS8300, BC37284 C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Ações que removem código desnecessário

Remover usos/importações desnecessários

A Ação Rápida Remover Usos Desnecessários/Importações remove quaisquer diretivas e Import não usadas using para o arquivo atual. Quando você seleciona esse item, as importações de namespace não usadas são removidas.

Remover conversão desnecessária

Se você converter um tipo em outro tipo que não exija uma conversão, o item Remover Ação Rápida de Conversão Desnecessária removerá a conversão desnecessária.

// before
int number = (int)3;

// Remove Unnecessary Cast

// after
int number = 3;

Remover variáveis não utilizados

Esta Ação Rápida permite que você remova variáveis que foram declaradas, mas nunca usadas em seu código.

// Before
public MyMethod()
{
    var unused = 8;
    var used = 1;
    return DoStuff(used);
}

// Remove unused variables

// After
public MyMethod()
{
    var used = 1;
    return DoStuff(used);
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
CS0219, BC42024 C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Remover tipo da expressão de valor padrão

Esta Ação Rápida remove o tipo de valor de uma expressão de valor padrão e usa o literal padrão quando o compilador pode inferir o tipo da expressão.

// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }

// Simplify default expression

// After
void DoWork(CancellationToken cancellationToken = default) { ... }
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0034 C# 7.1+ Visual Studio 2017 versão 15.3 e posterior

Ações que adicionam código ausente

Adicionar usos/importações para tipos em assemblies de referência, pacotes NuGet ou outros tipos em sua solução

O uso de tipos localizados em outros projetos em sua solução exibirá a Ação Rápida automaticamente, no entanto, os outros precisam ser habilitados na guia C# do Editor > de Texto de Opções > de Ferramentas > ou do Visual Basic > Advanced:

  • Sugerir usos/importações para tipos em assemblies de referência
  • Sugerir usos/importações para tipos em pacotes NuGet

Quando habilitado, se você usar um tipo em um namespace que atualmente não é importado, mas existe em um assembly de referência ou pacote NuGet, a diretiva de uso ou importação será criada.

// Before
Debug.WriteLine("Hello");

// using System.Diagnostics;

// After
using System.Diagnostics;

Debug.WriteLine("Hello");
ID do diagnóstico Idiomas aplicáveis
CS0103, BC30451 C# e Visual Basic

Adicionar casos ausentes/caso padrão/ambos

Ao criar uma switch instrução em C#ou Select Case instrução no Visual Basic, você pode usar uma Ação de Código para adicionar automaticamente itens de caso ausentes, uma instrução de caso padrão ou ambos.

Considere a seguinte enumeração e vazia switch ou instrução Select Case :

enum MyEnum
{
    Item1,
    Item2,
    Item3
}

...

MyEnum myEnum = MyEnum.Item1;

switch(myEnum)
{
}

Usar a Ação Adicionar Ambas as Ações Rápidas preenche os casos ausentes e adiciona um caso padrão:

switch(myEnum)
{
    case MyEnum.Item1:
        break;
    case MyEnum.Item2:
        break;
    case MyEnum.Item3:
        break;
    default:
        break;
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0010 C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Adicionar verificações nulas para parâmetros

Essa Ação Rápida permite que você adicione uma verificação em seu código para informar se um parâmetro é nulo.

// Before
class MyClass
{
    public string MyProperty { get; set; }

    public MyClass(string myProperty) // cursor inside myProperty
    {
        MyProperty = myProperty;
    }
}

// Add null check

// After
class MyClass
{
    public string MyProperty { get; set; }

    public MyClass(string myProperty)
    {
        MyProperty = myProperty ?? throw new ArgumentNullException(nameof(myProperty));
    }
}
Idiomas aplicáveis Versão compatível
C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Adicionar nome do argumento

// Before
var date = new DateTime(1997, 7, 8);

// Include argument name 'year' (include trailing arguments)

// After
var date = new DateTime(year: 1997, month: 7, day: 8);
Idiomas aplicáveis Versão compatível
C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Adicionar chaves

A Ação Rápida Adicionar chaves encapsula chaves em torno de instruções de linha if única.

// Before
if (true)
    return "hello,world";

// Add braces

// After
if (true)
{
    return "hello,world";
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0011 C# Visual Studio 2017 e posterior

Adicionar e ordenar modificadores

Essas Ações Rápidas ajudam a organizar modificadores, permitindo que você classifique os modificadores de acessibilidade existentes e adicione modificadores de acessibilidade ausentes.

// Before
enum Color
{
    Red, White, Blue
}

// Add accessibility modifiers

// After
internal enum Color
{
    Red, White, Blue
}
// Before
static private int thisFieldIsPublic;

// Order modifiers

// After
private static int thisFieldIsPublic;
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0036 C# e Visual Basic Visual Studio 2017 versão 15.5 e posterior
IDE0040 C# e Visual Basic Visual Studio 2017 versão 15.5 e posterior

Transformações de código

Converter o constructo 'if' em 'switch'

Esta Ação Rápida permite converter um constructo if-then-else em um constructo de comutador .

// Before
if (obj is string s)
{
  Console.WriteLine("obj is a string: " + s);
}

else if (obj is int i && i > 10)
{
  Console.WriteLine("obj is an int greater than 10");
}

// Convert to switch

// After
switch (obj)
{
  case string s:
    Console.WriteLine("Obj is a string: " + s);
    break;
  case int i when i > 10:
    Console.WriteLine("obj is an int greater than 10");
    break;
}
Idiomas aplicáveis Versão compatível
C# e Visual Basic Visual Studio 2017 versão 15.3 e posterior

Converter em cadeia de caracteres interpolada

Cadeias de caracteres interpoladas são uma maneira fácil de expressar cadeias de caracteres com variáveis inseridas, semelhantes ao método String.Format . Essa Ação Rápida reconhece casos em que as cadeias de caracteres são concatenadas ou usam String.Format e altera o uso para uma cadeia de caracteres interpolada.

// Before
int num = 3;
string s = string.Format("My string with {0} in the middle", num);

// Convert to interpolated string

// After
int num = 3;
string s = $"My string with {num} in the middle";
Idiomas aplicáveis Versão compatível
C# 6.0+ e Visual Basic 14+ Visual Studio 2017 e posterior

Usar inicializadores de objeto

Esta Ação Rápida permite que você use inicializadores de objeto em vez de invocar o construtor e ter linhas adicionais de instruções de atribuição.

// Before
var c = new Customer();
c.Age = 21;

// Object initialization can be simplified

// After
var c = new Customer() { Age = 21 };
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0017 C# e Visual Basic Visual Studio 2017 e posterior

Usar inicializadores de coleção

Esta Ação Rápida permite que você use inicializadores de coleção em vez de várias chamadas para o Add método de sua classe.

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

// Collection initialization can be simplified

// After
var list = new List<int> { 1, 2, 3 };
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0028 C# e Visual Basic Visual Studio 2017 e posterior

Converter propriedade automática em propriedade completa

Esta Ação Rápida permite que você converta uma propriedade automática em uma propriedade completa e vice-versa.

// Before
private int MyProperty { get; set; }

// Convert to full property

// After
private int MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}
Idiomas aplicáveis Versão compatível
C# e Visual Basic Visual Studio 2017 versão 15.5 e posterior

Converter corpo do bloco em membro com corpo de expressão

Esta Ação Rápida permite converter corpos de bloco em membros aptos à expressão para métodos, construtores, operadores, propriedades, indexadores e acessadores.

//Before
class MyClass4
{
    private int _myProperty;

    public int MyProperty
    {
        get { return _myProperty; }
        set
        {
            _myProperty = value;
        }
    }

    public MyClass4(int myProperty)
    {
        MyProperty = myProperty;
    }

    public void PrintProperty()
    {
        Console.WriteLine(MyProperty);
    }
}

// Use expression body for accessors/constructors/methods

// After
class MyClass4
{
    private int _myProperty;

    public int MyProperty
    {
        get => _myProperty;
        set => _myProperty = value;
    }

    public MyClass4(int myProperty) => MyProperty = myProperty;

    public void PrintProperty() => Console.WriteLine(MyProperty);
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0021-27 C# 6.0+ Visual Studio 2017 e posterior

Converter função anônima em função local

Esta Ação Rápida converte funções anônimas em funções locais.

// Before
Func<int, int> fibonacci = null;
fibonacci = (int n) =>
{
    return n <= 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
};

// Use local function

// After
int fibonacci(int n)
{
    return n <= 1 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}

Converter 'ReferenceEquals' em 'is null'

ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0041 C# 7.0+ Visual Studio 2017 versão 15.5 e posterior

Essa Ação Rápida sugere o uso da correspondência de padrões em vez do ReferenceEquals padrão de codificação, sempre que possível.

// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
    return;
}

// Use 'is null' check

// After
var value = "someString";
if (value is null)
{
    return;
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0039 C# 7.0+ Visual Studio 2017 versão 15. e posterior

Introduzir correspondência de padrões

Esta Ação Rápida sugere o uso de correspondência de padrões com conversões e verificações nulas em C#.

// Before
if (o is int)
{
    var i = (int)o;
    ...
}

// Use pattern matching

// After
if (o is int i)
{
    ...
}
// Before
var s = o as string;
if (s != null)
{
    ...
}

// Use pattern matching

// After
if (o is string s)
{
    ...
}
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0020 C# 7.0+ Visual Studio 2017 e posterior
IDE0019 C# 7.0+ Visual Studio 2017 e posterior

Alterar base para literais numéricos

Esta Ação Rápida permite converter um literal numérico de um sistema numérico base para outro. Por exemplo, você pode alterar um número para hexadecimal ou para formato binário.

// Before
int countdown = 2097152;

// Convert to hex

// After
int countdown = 0x200000;
Idiomas aplicáveis Versão compatível
C# 7.0+ e Visual Basic 14+ Visual Studio 2017 versão 15.3 e posterior

Inserir separadores de dígito em literais

Esta Ação Rápida permite adicionar caracteres separadores a valores literais.

// Before
int countdown = 1000000;

// Separate thousands

// After
int countdown = 1_000_000;
Idiomas aplicáveis Versão compatível
C# 7.0+ e Visual Basic 14+ Visual Studio 2017 versão 15.3 e posterior

Usar nomes de tupla explícitos

Esta Ação Rápida identifica áreas em que o nome da tupla explícita pode ser usado em vez de Item1, Item2 etc.

// Before
(string name, int age) customer = GetCustomer();
var name = customer.Item1;

// Use explicit tuple name

// After
(string name, int age) customer = GetCustomer();
var name = customer.name;
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0033 C# 7.0+ e Visual Basic 15+ Visual Studio 2017 e posterior

Usar nomes inferidos

Esta Ação Rápida aponta quando o código pode ser simplificado para usar nomes de membro inferidos em tipos anônimos ou nomes de elementos inferidos em tuplas.

// Before
var anon = new { age = age, name = name };

// Use inferred member name

// After
var anon = new { age, name };
// Before
var tuple = (age: age, name: name);

// Use inferred tuple element name

// After
var tuple = (age, name);
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0037 C# Visual Studio 2017 versão 15.5 e posterior
IDE0037 C# 7.1+ Visual Studio 2017 versão 15.5 e posterior

Declaração de tupla de desconstrução

Esta Ação Rápida permite desconstruir declarações de variável de tupla.

// Before
var person = GetPersonTuple();
Console.WriteLine($"{person.name} {person.age}");

(int x, int y) point = GetPointTuple();
Console.WriteLine($"{point.x} {point.y}");

//Deconstruct variable declaration

// After
var (name, age) = GetPersonTuple();
Console.WriteLine($"{name} {age}");

(int x, int y) = GetPointTuple();
Console.WriteLine($"{x} {y}");
ID do diagnóstico Idiomas aplicáveis Versão compatível
IDE0042 C# 7.0+ Visual Studio 2017 versão 15.5 e posterior

Tornar o método síncrono

Ao usar a palavra-chave ou Async a async palavra-chave em um método, espera-se que dentro desse método a palavra-chave ou Await a await palavra-chave também seja usada. No entanto, se esse não for o caso, será exibida uma Ação Rápida que torna o método síncrono removendo a async palavra-chave ou Async alterando o tipo de retorno. Use a opção Fazer método síncrono no menu Ações Rápidas.

// Before
async Task<int> MyAsyncMethod()
{
    return 3;
}

// Make method synchronous

// After
int MyAsyncMethod()
{
    return 3;
}
ID do erro Idiomas aplicáveis
CS1998, BC42356 C# e Visual Basic

Tornar o método assíncrono

Ao usar a palavra-chave ou Await dentro await de um método, espera-se que o método seja marcado com a palavra-chave ou Async a async palavra-chave. No entanto, se esse não for o caso, será exibida uma Ação Rápida que torna o método assíncrono. Use a opção Fazer método/Função assíncrona no menu Ações Rápidas.

// Before
int MyAsyncMethod()
{
    return await Task.Run(...);
}

// Make method asynchronous

// After
async Task<int> MyAsyncMethod()
{
    return await Task.Run(...);
}
ID do erro Idiomas aplicáveis Versão compatível
CS4032, BC37057 C# e Visual Basic Visual Studio 2017 e posterior

Consulte também