Běžné rychlé akce
Oddíly v tomto tématu obsahují některé běžné rychlé akce , které se vztahují na kód jazyka C# i Visual Basic. Tyto akce jsou opravy kódu pro diagnostiku kompilátoru nebo integrované analyzátory platformy kompilátoru .NET v sadě Visual Studio.
Akce, které opravují chyby
Rychlé akce v této části opravují chyby v kódu, které by způsobily selhání sestavení. Pokud jsou k dispozici rychlé akce pro opravu chyby na řádku kódu, ikona zobrazená na okraji nebo pod červenou vlnovkou je žárovka s červeným znakem x.
Oprava chybně napsaného symbolu nebo klíčového slova
Pokud v sadě Visual Studio omylem chybně zadáte nebo zadáte klíčové slovo, tato rychlá akce ho automaticky opraví za vás. Tyto položky uvidíte v nabídce žárovky jako "<Změnit chybně napsané slovo>" na "<správné slovo>". Příklad:
// Before
private viod MyMethod()
{
}
// Change 'viod' to 'void'
// After
private void MyMethod()
{
}
ID chyby | Příslušné jazyky |
---|---|
CS0103, BC30002 | C# a Visual Basic |
Řešení konfliktu při slučování Gitu
Tyto rychlé akce umožňují vyřešit konflikty při slučování Gitu tím, že "uděláte změnu", která odebere konfliktní kód a značky.
// Before
private void MyMethod()
{
if (false)
{
}
}
// Take changes from 'HEAD'
// After
private void MyMethod()
{
if (true)
{
}
}
ID chyby | Příslušné jazyky | Podporovaná verze |
---|---|---|
CS8300, BC37284 | C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Akce, které odeberou nepotřebný kód
Odebrání nepotřebných použití/importů
Akce Odebrat nepotřebné použití/Importy rychlých akcí odebere všechny nepoužívané using
a Import
direktivy pro aktuální soubor. Když vyberete tuto položku, odeberou se nepoužívané importy oboru názvů.
Odebrání nepotřebného přetypování
Pokud přetypujete typ na jiný typ, který nevyžaduje přetypování, odebere položka Akce Rychlé přetypování nepotřebné přetypování.
Odebrání nepoužívaných proměnných
Tato rychlá akce umožňuje odebrat proměnné, které byly deklarovány, ale nikdy se v kódu nepoužívaly.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
CS0219, BC42024 | C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Odebrání typu z výchozího výrazu hodnoty
Tato rychlá akce odebere typ hodnoty z výchozího výrazu hodnoty a použije výchozí literál , když kompilátor může odvodit typ výrazu.
// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }
// Simplify default expression
// After
void DoWork(CancellationToken cancellationToken = default) { ... }
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0034 | C# 7.1 nebo novější | Visual Studio 2017 verze 15.3 a novější |
Akce, které přidávají chybějící kód
Přidání použití/importů pro typy v referenčních sestaveních, balíčcích NuGet nebo jiných typech v řešení
Použití typů umístěných v jiných projektech v řešení zobrazí rychlou akci automaticky, ostatní je ale potřeba povolit na kartě Nástroje možnosti textového editoru > C# nebo Rozšířené v jazyce Visual Basic>:> >
Použití typů umístěných v jiných projektech v řešení zobrazí rychlou akci automaticky, ostatní je ale potřeba povolit z karty Editor možností > > nástrojů > C# nebo Základní > upřesnit:
- Navrhnout použití/import pro typy v referenčních sestaveních
- Návrhy použití/importů pro typy v balíčcích NuGet
Pokud je tato možnost povolená, použijete-li typ v oboru názvů, který není aktuálně importován, ale existuje v referenčním sestavení nebo balíčku NuGet, vytvoří se direktiva using nebo import.
// Before
Debug.WriteLine("Hello");
// using System.Diagnostics;
// After
using System.Diagnostics;
Debug.WriteLine("Hello");
ID diagnostiky | Příslušné jazyky |
---|---|
CS0103, BC30451 | C# a Visual Basic |
Přidání chybějících případů / výchozí případ / obojí
Při vytváření switch
příkazu v jazyce C# nebo Select Case
příkazu v jazyce Visual Basic můžete pomocí akce kódu automaticky přidat chybějící položky případu, výchozí příkaz case nebo obojí.
Představte si následující výčet a prázdný switch
příkaz nebo Select Case
příkaz:
Použití možnosti Přidat obě rychlé akce vyplní chybějící případy a přidá výchozí případ:
switch(myEnum)
{
case MyEnum.Item1:
break;
case MyEnum.Item2:
break;
case MyEnum.Item3:
break;
default:
break;
}
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0010 | C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Přidání kontrol hodnot null pro parametry
Tato rychlá akce umožňuje přidat do kódu vrácení se změnami, abyste mohli zjistit, jestli má parametr hodnotu null.
// 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));
}
}
Příslušné jazyky | Podporovaná verze |
---|---|
C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Přidání názvu argumentu
// 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);
Příslušné jazyky | Podporovaná verze |
---|---|
C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Přidání složených závorek
Rychlá akce Přidat složené závorky zalamuje složené závorky kolem příkazů s jedním řádkem if
.
// Before
if (true)
return "hello,world";
// Add braces
// After
if (true)
{
return "hello,world";
}
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0011 | C# | Visual Studio 2017 a novější |
Přidání modifikátorů a jejich pořadí
Tyto rychlé akce pomáhají uspořádat modifikátory tím, že umožňují seřadit existující a přidat chybějící modifikátory přístupnosti.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0036 | C# a Visual Basic | Visual Studio 2017 verze 15.5 a novější |
IDE0040 | C# a Visual Basic | Visual Studio 2017 verze 15.5 a novější |
Transformace kódu
Převést konstruktor if na switch
Tato rychlá akce umožňuje převést konstruktor if-then-else na konstruktor přepínače .
// 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;
}
Příslušné jazyky | Podporovaná verze |
---|---|
C# a Visual Basic | Visual Studio 2017 verze 15.3 a novější |
Převod na interpolovaný řetězec
Interpolované řetězce představují snadný způsob, jak vyjádřit řetězce pomocí vložených proměnných, podobně jako String.Format metoda. Tato rychlá akce rozpozná případy, kdy jsou řetězce zřetězeny nebo pomocí String.Format, a změní použití na interpolovaný řetězec.
// 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";
Příslušné jazyky | Podporovaná verze |
---|---|
C# 6.0+ a Visual Basic 14+ | Visual Studio 2017 a novější |
Použití inicializátorů objektů
Tato rychlá akce umožňuje používat inicializátory objektů místo vyvolání konstruktoru a další řádky příkazů přiřazení.
// Before
var c = new Customer();
c.Age = 21;
// Object initialization can be simplified
// After
var c = new Customer() { Age = 21 };
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0017 | C# a Visual Basic | Visual Studio 2017 a novější |
Použití inicializátorů kolekcí
Tato rychlá akce umožňuje používat inicializátory kolekcí místo více volání Add
metody třídy.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0028 | C# a Visual Basic | Visual Studio 2017 a novější |
Převod automatické vlastnosti na úplnou vlastnost
Tato rychlá akce umožňuje převést automatickou vlastnost na úplnou vlastnost a naopak.
// Before
private int MyProperty { get; set; }
// Convert to full property
// After
private int MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Příslušné jazyky | Podporovaná verze |
---|---|
C# a Visual Basic | Visual Studio 2017 verze 15.5 a novější |
Převod textu bloku na člena s textem výrazu
Tato rychlá akce umožňuje převést blokové tělo na body výrazů pro metody, konstruktory, operátory, vlastnosti, indexery a přístupové objekty.
//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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0021-27 | C# 6.0+ | Visual Studio 2017 a novější |
Převod anonymní funkce na místní funkci
Tato rychlá akce převede anonymní funkce na místní funkce.
// 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);
}
Convert 'ReferenceEquals' to 'is null'
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0041 | C# 7.0+ | Visual Studio 2017 verze 15.5 a novější |
Tato rychlá akce navrhuje použití porovnávání vzorů místo ReferenceEquals
vzoru kódování, pokud je to možné.
// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
return;
}
// Use 'is null' check
// After
var value = "someString";
if (value is null)
{
return;
}
ID diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0039 | C# 7.0+ | Visual Studio 2017 verze 15 a novější |
Zavedení porovnávání vzorů
Tato rychlá akce navrhuje použití porovnávání vzorů s přetypováními a kontrolami null v jazyce 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0020 | C# 7.0+ | Visual Studio 2017 a novější |
IDE0019 | C# 7.0+ | Visual Studio 2017 a novější |
Změna základu pro číselné literály
Tato rychlá akce umožňuje převést číselný literál z jednoho základního číselného systému na jiný. Můžete například změnit číslo na šestnáctkový nebo binární formát.
Příslušné jazyky | Podporovaná verze |
---|---|
C# 7.0+ a Visual Basic 14+ | Visual Studio 2017 verze 15.3 a novější |
Vložení oddělovačů číslic do literálů
Tato rychlá akce umožňuje přidat oddělovače znaků do hodnot literálů.
Příslušné jazyky | Podporovaná verze |
---|---|
C# 7.0+ a Visual Basic 14+ | Visual Studio 2017 verze 15.3 a novější |
Použití explicitních názvů řazené kolekce členů
Tato rychlá akce identifikuje oblasti, kde lze použít explicitní název řazené kolekce členů místo položky1, položky2 atd.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0033 | C# 7.0+ a Visual Basic 15+ | Visual Studio 2017 a novější |
Použití odvozených názvů
Tato rychlá akce ukazuje, kdy lze kód zjednodušit tak, aby používal odvozené názvy členů v anonymních typech nebo odvozené názvy elementů v řazených kolekcích členů.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0037 | C# | Visual Studio 2017 verze 15.5 a novější |
IDE0037 | C# 7.1 nebo novější | Visual Studio 2017 verze 15.5 a novější |
Dekonstrukční deklarace řazené kolekce členů
Tato rychlá akce umožňuje dekonstrukci deklarací proměnných řazené kolekce členů.
// 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 diagnostiky | Příslušné jazyky | Podporovaná verze |
---|---|---|
IDE0042 | C# 7.0+ | Visual Studio 2017 verze 15.5 a novější |
Synchronní metoda Make
Při použití async
nebo Async
klíčového slova v metodě je očekáváno, že uvnitř této metody await
se používá také klíčové slovo nebo Await
klíčové slovo. Pokud to ale není případ, zobrazí se rychlá akce, která provede synchronní metodu odebráním async
nebo Async
klíčovým slovem a změnou návratového typu. Použijte synchronní možnost Vytvořit metodu z nabídky Rychlé akce.
// Before
async Task<int> MyAsyncMethod()
{
return 3;
}
// Make method synchronous
// After
int MyAsyncMethod()
{
return 3;
}
ID chyby | Příslušné jazyky |
---|---|
CS1998, BC42356 | C# a Visual Basic |
Asynchronní metoda Make
Při použití await
nebo klíčového slova uvnitř metody se očekává, že metoda je označena tímto nebo Async
klíčovým slovem async
Await
. Pokud to ale není případ, zobrazí se rychlá akce, která vytvoří metodu asynchronní. Použijte možnost Vytvořit metodu nebo asynchronní funkci z nabídky Rychlé akce.
// Before
int MyAsyncMethod()
{
return await Task.Run(...);
}
// Make method asynchronous
// After
async Task<int> MyAsyncMethod()
{
return await Task.Run(...);
}
ID chyby | Příslušné jazyky | Podporovaná verze |
---|---|---|
CS4032, BC37057 | C# a Visual Basic | Visual Studio 2017 a novější |