Bagikan melalui


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.

Quick Actions error icon and menu

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.

// before
int number = (int)3;

// Remove Unnecessary Cast

// after
int number = 3;

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:

enum MyEnum
{
    Item1,
    Item2,
    Item3
}

...

MyEnum myEnum = MyEnum.Item1;

switch(myEnum)
{
}

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.

// Before
int countdown = 2097152;

// Convert to hex

// After
int countdown = 0x200000;
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.

// Before
int countdown = 1000000;

// Separate thousands

// After
int countdown = 1_000_000;
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 awaitAwait 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

Baca juga