Tindakan Cepat Umum
Bagian dalam topik ini mencantumkan beberapa Tindakan Cepat umum yang berlaku untuk kode C# dan Visual Basic. Tindakan ini adalah perbaikan kode untuk diagnostik kompilator, atau penganalisis .NET Compiler Platform bawaan di Visual Studio.
Tindakan yang memperbaiki kesalahan
Tindakan Cepat di bagian ini memperbaiki kesalahan dalam kode yang akan menyebabkan build gagal. Saat Tindakan Cepat tersedia untuk memperbaiki kesalahan pada baris kode, ikon yang ditampilkan di margin atau di bawah squiggle merah adalah bola lampu dengan 'x' merah di atasnya.
Mengoreksi simbol atau kata kunci yang salah eja
Jika Anda tidak sengaja salah mengetik atau kata kunci di Visual Studio, Tindakan Cepat ini secara otomatis memperbaikinya untuk Anda. Anda akan melihat item ini di menu bola lampu sebagai "Ubah '<kata> yang salah eja' menjadi '<kata> yang benar'". Misalnya:
// Before
private viod MyMethod()
{
}
// Change 'viod' to 'void'
// After
private void MyMethod()
{
}
ID Kesalahan | Bahasa yang Berlaku |
---|---|
CS0103, BC30002 | C# dan Visual Basic |
Mengatasi konflik penggabungan git
Tindakan Cepat ini memungkinkan Anda mengatasi konflik penggabungan git dengan "mengambil perubahan", yang menghapus kode dan penanda yang bertentangan.
// Before
private void MyMethod()
{
if (false)
{
}
}
// Take changes from 'HEAD'
// After
private void MyMethod()
{
if (true)
{
}
}
ID Kesalahan | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
CS8300, BC37284 | C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Tindakan yang menghapus kode yang tidak perlu
Menghapus penggunaan/Impor yang tidak perlu
Tindakan Cepat Hapus Penggunaan/Impor yang Tidak Perlu menghapus semua yang tidak digunakan using
dan Import
direktif untuk file saat ini. Ketika Anda memilih item ini, impor namespace yang tidak digunakan akan dihapus.
Hapus cast yang tidak perlu
Jika Anda melemparkan jenis ke jenis lain yang tidak memerlukan cast, item Hapus Tindakan Cepat Cast yang Tidak Perlu akan menghapus cast yang tidak perlu.
Menghapus variabel yang tidak digunakan
Tindakan Cepat ini memungkinkan Anda menghapus variabel yang telah dideklarasikan tetapi tidak pernah digunakan dalam kode Anda.
// 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
CS0219, BC42024 | C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Menghapus jenis dari ekspresi nilai default
Tindakan Cepat ini menghapus jenis nilai dari ekspresi nilai default dan menggunakan literal default saat pengkompilasi dapat menyimpulkan jenis ekspresi.
// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }
// Simplify default expression
// After
void DoWork(CancellationToken cancellationToken = default) { ... }
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0034 | C# 7.1+ | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Tindakan yang menambahkan kode yang hilang
Menambahkan penggunaan/impor untuk jenis dalam rakitan referensi, paket NuGet, atau jenis lain dalam solusi Anda
Menggunakan jenis yang terletak di proyek lain dalam solusi Anda akan menampilkan Tindakan Cepat secara otomatis, namun yang lain perlu diaktifkan dari tab Opsi Alat >> Editor > Teks C# atau Visual Basic > Advanced:
Menggunakan jenis yang terletak di proyek lain dalam solusi Anda akan menampilkan Tindakan Cepat secara otomatis, namun yang lain perlu diaktifkan dari tab Opsi Alat >> Editor > Teks C# atau Tingkat Lanjut Dasar>:
- Sarankan penggunaan/impor untuk jenis dalam rakitan referensi
- Sarankan penggunaan/impor untuk jenis dalam paket NuGet
Saat diaktifkan, jika Anda menggunakan jenis di namespace layanan yang saat ini tidak diimpor tetapi ada dalam rakitan referensi atau paket NuGet, direktif penggunaan atau impor dibuat.
// Before
Debug.WriteLine("Hello");
// using System.Diagnostics;
// After
using System.Diagnostics;
Debug.WriteLine("Hello");
ID diagnostik | Bahasa yang Berlaku |
---|---|
CS0103, BC30451 | C# dan Visual Basic |
Menambahkan kasus yang hilang/kasus default/keduanya
Saat membuat switch
pernyataan di C#, atau Select Case
pernyataan di Visual Basic, Anda bisa menggunakan Tindakan Kode untuk menambahkan item kasus yang hilang secara otomatis, pernyataan kasus default, atau keduanya.
Pertimbangkan enumerasi dan pernyataan switch
kosong atau Select Case
berikut:
Menggunakan Tambahkan Kedua Tindakan Cepat mengisi kasus yang hilang dan menambahkan kasus default:
switch(myEnum)
{
case MyEnum.Item1:
break;
case MyEnum.Item2:
break;
case MyEnum.Item3:
break;
default:
break;
}
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0010 | C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Menambahkan pemeriksaan null untuk parameter
Tindakan Cepat ini memungkinkan Anda menambahkan cek masuk kode Anda untuk mengetahui apakah parameter 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));
}
}
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Tambahkan nama argumen
// 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);
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Menambahkan kurung kurawal
Tambahkan kurung kurung kurawal Tindakan Cepat membungkus kurung kurawal di sekitar pernyataan baris if
tunggal.
// Before
if (true)
return "hello,world";
// Add braces
// After
if (true)
{
return "hello,world";
}
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0011 | C# | Visual Studio 2017 dan yang lebih baru |
Menambahkan dan mengurutkan pengubah
Tindakan Cepat ini membantu mengatur pengubah dengan memungkinkan Anda mengurutkan pengubah aksesibilitas yang ada dan yang hilang.
// 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0036 | C# dan Visual Basic | Visual Studio 2017 versi 15.5 dan yang lebih baru |
IDE0040 | C# dan Visual Basic | Visual Studio 2017 versi 15.5 dan yang lebih baru |
Transformasi kode
Konversi konstruksi 'if' menjadi 'switch'
Tindakan Cepat ini memungkinkan Anda mengonversi konstruksi if-then-else ke konstruksi 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;
}
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# dan Visual Basic | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Konversi ke string terinterpolasi
String terinterpolasi adalah cara mudah untuk mengekspresikan string dengan variabel yang disematkan, mirip dengan metode String.Format . Tindakan Cepat ini mengenali kasus di mana string digabungkan, atau menggunakan String.Format, dan mengubah penggunaan menjadi string terinterpolasi.
// 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";
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# 6.0+ dan Visual Basic 14+ | Visual Studio 2017 dan yang lebih baru |
Menggunakan penginisialisasi objek
Tindakan Cepat ini memungkinkan Anda menggunakan penginisialisasi objek daripada memanggil konstruktor dan memiliki baris pernyataan penugasan tambahan.
// Before
var c = new Customer();
c.Age = 21;
// Object initialization can be simplified
// After
var c = new Customer() { Age = 21 };
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0017 | C# dan Visual Basic | Visual Studio 2017 dan yang lebih baru |
Menggunakan penginisialisasi koleksi
Tindakan Cepat ini memungkinkan Anda menggunakan penginisialisasi koleksi daripada beberapa panggilan ke Add
metode kelas Anda.
// 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0028 | C# dan Visual Basic | Visual Studio 2017 dan yang lebih baru |
Mengonversi properti otomatis ke properti penuh
Tindakan Cepat ini memungkinkan Anda mengonversi properti otomatis ke properti lengkap, dan sebaliknya.
// Before
private int MyProperty { get; set; }
// Convert to full property
// After
private int MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# dan Visual Basic | Visual Studio 2017 versi 15.5 dan yang lebih baru |
Mengonversi isi blok menjadi anggota bertubuh ekspresi
Tindakan Cepat ini memungkinkan Anda mengonversi badan blok menjadi anggota bertubuh ekspresi untuk metode, konstruktor, operator, properti, pengindeks, dan aksesor.
//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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0021-27 | C# 6.0+ | Visual Studio 2017 dan yang lebih baru |
Mengonversi fungsi anonim ke fungsi lokal
Tindakan Cepat ini mengonversi fungsi anonim menjadi fungsi lokal.
// 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);
}
Konversi 'ReferenceEquals' menjadi 'is null'
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0041 | C# 7.0+ | Visual Studio 2017 versi 15.5 dan yang lebih baru |
Tindakan Cepat ini menyarankan penggunaan pencocokan pola daripada ReferenceEquals
pola pengkodian, jika memungkinkan.
// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
return;
}
// Use 'is null' check
// After
var value = "someString";
if (value is null)
{
return;
}
ID diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0039 | C# 7.0+ | Visual Studio 2017 versi 15. dan yang lebih baru |
Memperkenalkan pencocokan pola
Tindakan Cepat ini menyarankan penggunaan pencocokan pola dengan transmisi dan pemeriksaan null di 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0020 | C# 7.0+ | Visual Studio 2017 dan yang lebih baru |
IDE0019 | C# 7.0+ | Visual Studio 2017 dan yang lebih baru |
Mengubah basis untuk literal numerik
Tindakan Cepat ini memungkinkan Anda mengonversi literal numerik dari satu sistem numerik dasar ke sistem numerik dasar lainnya. Misalnya, Anda dapat mengubah angka menjadi heksadesimal atau ke format biner.
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# 7.0+ dan Visual Basic 14+ | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Menyisipkan pemisah digit ke dalam literal
Tindakan Cepat ini memungkinkan Anda menambahkan karakter pemisah ke dalam nilai harfiah.
Bahasa yang Berlaku | Versi yang didukung |
---|---|
C# 7.0+ dan Visual Basic 14+ | Visual Studio 2017 versi 15.3 dan yang lebih baru |
Menggunakan nama tuple eksplisit
Tindakan Cepat ini mengidentifikasi area di mana nama tuple eksplisit dapat digunakan daripada Item1, Item2, dll.
// 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0033 | C# 7.0+ dan Visual Basic 15+ | Visual Studio 2017 dan yang lebih baru |
Gunakan nama yang disimpulkan
Tindakan Cepat ini menunjukkan kapan kode dapat disederhanakan untuk menggunakan nama anggota yang disimpulkan dalam jenis anonim, atau nama elemen yang disimpulkan dalam tuple.
// 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0037 | C# | Visual Studio 2017 versi 15.5 dan yang lebih baru |
IDE0037 | C# 7.1+ | Visual Studio 2017 versi 15.5 dan yang lebih baru |
Dekonstruksi deklarasi tuple
Tindakan Cepat ini memungkinkan dekonstruksi deklarasi variabel 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 diagnostik | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
IDE0042 | C# 7.0+ | Visual Studio 2017 versi 15.5 dan yang lebih baru |
Membuat metode sinkron
Saat menggunakan async
kata kunci atau Async
pada metode, diharapkan bahwa di dalam metode atau await
Await
kata kunci tersebut juga digunakan. Namun, jika ini bukan masalahnya, Tindakan Cepat muncul yang membuat metode sinkron dengan menghapus async
kata kunci atau Async
dan mengubah jenis pengembalian. Gunakan opsi Buat metode sinkron dari menu Tindakan Cepat.
// Before
async Task<int> MyAsyncMethod()
{
return 3;
}
// Make method synchronous
// After
int MyAsyncMethod()
{
return 3;
}
ID Kesalahan | Bahasa yang Berlaku |
---|---|
CS1998, BC42356 | C# dan Visual Basic |
Membuat metode asinkron
Saat menggunakan await
kata kunci atau Await
di dalam metode, diharapkan metode ditandai dengan async
kata kunci atau Async
. Namun, jika ini tidak terjadi, Tindakan Cepat muncul yang membuat metode asinkron. Gunakan opsi Buat metode/Fungsi asinkron dari menu Tindakan Cepat.
// Before
int MyAsyncMethod()
{
return await Task.Run(...);
}
// Make method asynchronous
// After
async Task<int> MyAsyncMethod()
{
return await Task.Run(...);
}
ID Kesalahan | Bahasa yang Berlaku | Versi yang didukung |
---|---|---|
CS4032, BC37057 | C# dan Visual Basic | Visual Studio 2017 dan yang lebih baru |