Actions rapides courantes
Les sections de cette rubrique répertorient quelques-unes des Actions rapides courantes qui sont applicables à la fois au code C# et au code Visual Basic. Ces actions sont des corrections du code pour les diagnostics du compilateur ou pour les analyseurs .NET Compiler Platform intégrés dans Visual Studio.
Actions permettant de résoudre des erreurs
Les actions rapides de cette section corrigent les erreurs dans le code qui provoquent un échec de génération. Quand des actions rapides sont disponibles pour corriger une erreur sur une ligne de code, l’icône qui s’affiche dans la marge ou en dessous de la ligne ondulée rouge est une ampoule avec un « x » rouge dessus.
Symbole ou mot clé mal orthographié correct
Si par erreur vous orthographiez mal un type ou un mot clé dans Visual Studio, cette action rapide le corrige automatiquement pour vous. Vous voyez ces éléments dans le menu Ampoule comme « Remplacer « <mot mal orthographié> » par « <mot correct> » ». Par exemple :
// Before
private viod MyMethod()
{
}
// Change 'viod' to 'void'
// After
private void MyMethod()
{
}
ID d'erreur | Langages applicables |
---|---|
CS0103, BC30002 | C# et Visual Basic |
Résoudre un conflit de fusion Git
Ces actions rapides vous permettent de résoudre les conflits de fusion Git par une « modification » qui supprime les marqueurs et le code en conflit.
// Before
private void MyMethod()
{
if (false)
{
}
}
// Take changes from 'HEAD'
// After
private void MyMethod()
{
if (true)
{
}
}
ID d'erreur | Langages applicables | Version prise en charge |
---|---|---|
CS8300, BC37284 | C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Actions permettant de supprimer du code inutile
Supprimer les Usings inutiles/les importations superflues
L’action rapide Supprimer les directives Using/Import inutiles supprime toutes les directives using
et Import
inutilisées pour le fichier actuel. Quand vous sélectionnez cet élément, les importations d’espaces de noms inutilisées sont supprimées.
Supprimer le cast inutile
Si vous castez un type en un autre type qui ne nécessite pas de cast, l’élément d’Action rapide Supprimer le cast inutile supprime le cast inutile.
Supprimer les variables inutilisées
Cette action rapide vous permet de supprimer les variables qui ont été déclarées, mais jamais utilisées dans votre code.
// 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
CS0219, BC42024 | C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Supprimer le type de l’expression de valeur par défaut
Cette action rapide permet de supprimer le type de valeur d’une expression de valeur par défaut et utilise le littéral par défaut quand le compilateur peut déduire le type de l’expression.
// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }
// Simplify default expression
// After
void DoWork(CancellationToken cancellationToken = default) { ... }
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0034 | C# 7.1+ | Visual Studio 2017 version 15.3 et ultérieures |
Actions permettant d’ajouter du code manquant
Ajouter des instructions using/imports pour les types dans les assemblys de référence, les packages NuGet ou d’autres types de votre solution
L’utilisation de types situés dans d’autres projets de votre solution affiche automatiquement l’action rapide, mais vous devez activer les autres à partir de l’onglet Outils > Options > Éditeur de texte > C# ou Visual Basic > Avancé :
L’utilisation de types situés dans d’autres projets de votre solution affiche automatiquement l’action rapide, mais vous devez activer les autres à partir de l’onglet Outils > Options > Éditeur de texte > C# ou Visual Basic > Avancé :
- Suggérer des usings/imports pour les types dans les assemblys de référence
- Suggérer des usings/imports pour les types dans les packages NuGet
Quand ces options sont activées, si vous utilisez un type dans un espace de noms qui n’est pas importé, mais qui existe dans un assembly de référence ou un package NuGet, la directive using ou import est créée.
// Before
Debug.WriteLine("Hello");
// using System.Diagnostics;
// After
using System.Diagnostics;
Debug.WriteLine("Hello");
ID de diagnostic | Langages applicables |
---|---|
CS0103, BC30451 | C# et Visual Basic |
Ajouter les instructions case manquantes/une instruction case par défaut/les deux
Quand vous créez une instruction switch
en C# ou une instruction Select Case
en Visual Basic, vous pouvez utiliser une action de code pour ajouter automatiquement des éléments case manquants, une instruction case par défaut, ou les deux.
Considérons l’énumération et l’instruction switch
ou Select Case
vide suivantes :
Utilisez l’action rapide Ajouter les deux pour renseigner à la fois les instructions case manquantes et une instruction case par défaut :
switch(myEnum)
{
case MyEnum.Item1:
break;
case MyEnum.Item2:
break;
case MyEnum.Item3:
break;
default:
break;
}
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0010 | C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Ajouter des contrôles de valeurs Null pour les paramètres
Cette action rapide vous permet d’ajouter un contrôle dans votre code pour déterminer si un paramètre est 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));
}
}
Langages applicables | Version prise en charge |
---|---|
C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Ajouter le nom de l’argument
// 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);
Langages applicables | Version prise en charge |
---|---|
C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Ajouter des accolades
L’action rapide Ajouter des accolades place des accolades autour des instructions if
sur une seule ligne.
// Before
if (true)
return "hello,world";
// Add braces
// After
if (true)
{
return "hello,world";
}
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0011 | C# | Visual Studio 2017 et versions ultérieures |
Ajouter et trier des modificateurs
Ces actions rapides facilitent l’organisation des modificateurs en vous permettant de trier les modificateurs existants et d’ajouter des modificateurs d’accessibilité manquants.
// 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0036 | C# et Visual Basic | Visual Studio 2017 versions 15.5 et ultérieures |
IDE0040 | C# et Visual Basic | Visual Studio 2017 versions 15.5 et ultérieures |
Transformations de code
Convertir une construction « if » en « switch »
Cette action rapide vous permet de convertir une construction if-then-else en construction switch.
// 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;
}
Langages applicables | Version prise en charge |
---|---|
C# et Visual Basic | Visual Studio 2017 version 15.3 et ultérieures |
Convertir en chaîne interpolée
Les chaînes interpolées représentent un moyen simple d’exprimer des chaînes avec des variables incorporées, similaire à la méthode String.Format. Cette action rapide reconnaît les chaînes concaténées ou l’utilisation de String.Format et met une chaîne interpolée à la place.
// 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";
Langages applicables | Version prise en charge |
---|---|
C# 6.0+ et Visual Basic 14+ | Visual Studio 2017 et versions ultérieures |
Utiliser des initialiseurs d’objets
Cette Action rapide permet d’utiliser des initialiseurs d’objets au lieu d’appeler le constructeur et d’avoir des lignes supplémentaires d’instructions d’assignation.
// Before
var c = new Customer();
c.Age = 21;
// Object initialization can be simplified
// After
var c = new Customer() { Age = 21 };
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0017 | C# et Visual Basic | Visual Studio 2017 et versions ultérieures |
Utiliser des initialiseurs de collections
Cette action rapide vous permet d’utiliser des initialiseurs de collection au lieu de plusieurs appels à la méthode Add
de votre 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0028 | C# et Visual Basic | Visual Studio 2017 et versions ultérieures |
Convertir une propriété automatique en propriété complète
Cette action rapide vous permet de convertir une propriété automatique en propriété complète, et vice versa.
// Before
private int MyProperty { get; set; }
// Convert to full property
// After
private int MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Langages applicables | Version prise en charge |
---|---|
C# et Visual Basic | Visual Studio 2017 versions 15.5 et ultérieures |
Convertir un corps de bloc en membre expression-bodied
Cette action rapide vous permet de convertir des corps de bloc en membres expression-bodied pour des méthodes, des constructeurs, des opérateurs, des propriétés, des indexeurs et des accesseurs.
//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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0021-27 | C# 6.0+ | Visual Studio 2017 et versions ultérieures |
Convertir une fonction anonyme en fonction locale
Cette action rapide convertit les fonctions anonymes en fonctions locales.
// 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);
}
Convertir « ReferenceEquals» en « is null »
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0041 | C# 7.0+ | Visual Studio 2017 versions 15.5 et ultérieures |
Cette action rapide suggère l’utilisation de critères spéciaux plutôt que le modèle de codage ReferenceEquals
, dans la mesure du possible.
// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
return;
}
// Use 'is null' check
// After
var value = "someString";
if (value is null)
{
return;
}
ID de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0039 | C# 7.0+ | Visual Studio 2017 version 15. et versions ultérieures |
Introduire des critères spéciaux
Cette action rapide suggère l’utilisation de critères spéciaux avec des casts et des contrôles de valeur null en 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0020 | C# 7.0+ | Visual Studio 2017 et versions ultérieures |
IDE0019 | C# 7.0+ | Visual Studio 2017 et versions ultérieures |
Changer la base des littéraux numériques
Cette action rapide vous permet de convertir un littéral numérique d’un système numérique de base en un autre. Par exemple, vous pouvez convertir un nombre en un format hexadécimal ou binaire.
Langages applicables | Version prise en charge |
---|---|
C# 7.0+ et Visual Basic 14+ | Visual Studio 2017 version 15.3 et ultérieures |
Insérer des séparateurs numériques dans les littéraux
Cette action rapide vous permet d’ajouter des caractères de séparation aux valeurs littérales.
Langages applicables | Version prise en charge |
---|---|
C# 7.0+ et Visual Basic 14+ | Visual Studio 2017 version 15.3 et ultérieures |
Utiliser des noms de tuples explicites
Cette action rapide identifie les zones où le nom de tuple explicite peut être utilisé au lieu 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0033 | C# 7.0+ et Visual Basic 15+ | Visual Studio 2017 et versions ultérieures |
Utiliser des noms déduits
Cette action rapide indique quand du code peut être simplifié de façon à utiliser des noms de membre inférés dans les types anonymes ou des noms d’éléments inférés dans les tuples.
// 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0037 | C# | Visual Studio 2017 versions 15.5 et ultérieures |
IDE0037 | C# 7.1+ | Visual Studio 2017 versions 15.5 et ultérieures |
Déconstruire la déclaration de tuple
Cette action rapide permet de déconstruire les déclarations de variables de tuple.
// 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 de diagnostic | Langages applicables | Version prise en charge |
---|---|---|
IDE0042 | C# 7.0+ | Visual Studio 2017 versions 15.5 et ultérieures |
Rendre la méthode synchrone
Lors de l’utilisation du mot clé async
ou Async
sur une méthode, le mot clé await
ou Await
doit également être utilisé dans cette méthode. Cependant, si ce n’est pas le cas, une action rapide apparaît, qui vous permet de rendre la méthode synchrone en supprimant le mot clé async
ou Async
, et en changeant le type de retour. Utilisez l’option Rendre la méthode synchrone dans le menu Actions rapides.
// Before
async Task<int> MyAsyncMethod()
{
return 3;
}
// Make method synchronous
// After
int MyAsyncMethod()
{
return 3;
}
ID d'erreur | Langages applicables |
---|---|
CS1998, BC42356 | C# et Visual Basic |
Rendre la méthode asynchrone
Si le mot clé await
ou Await
est utilisé dans une méthode, cette méthode doit se retrouver marquée du mot clé async
ou Async
. Toutefois, si ce n’est pas le cas, une Action rapide apparaît, qui rend la méthode asynchrone. Utilisez l’option Make method/Function asynchronous (Rendre la méthode/fonction asynchrone) dans le menu Actions rapides.
// Before
int MyAsyncMethod()
{
return await Task.Run(...);
}
// Make method asynchronous
// After
async Task<int> MyAsyncMethod()
{
return await Task.Run(...);
}
ID d'erreur | Langages applicables | Version prise en charge |
---|---|---|
CS4032, BC37057 | C# et Visual Basic | Visual Studio 2017 et versions ultérieures |