Yaygın Hızlı Eylemler
Bu konudaki bölümlerde hem C# hem de Visual Basic kodu için geçerli olan bazı yaygın Hızlı Eylemler listelenir. Bu eylemler, derleyici tanılamaları veya Visual Studio'daki yerleşik .NET Derleyici Platformu çözümleyicileri için kod düzeltmeleridir.
Hataları düzelten eylemler
Bu bölümdeki Hızlı Eylemler, derlemenin başarısız olmasına neden olabilecek kod hatalarını düzeltir. Bir kod satırındaki hatayı düzeltmek için Hızlı Eylemler kullanılabilir olduğunda, kenar boşluğunda veya kırmızı dalgalı çizginin altında görüntülenen simge üzerinde kırmızı 'x' bulunan bir ampuldür.
Yanlış yazılmış simgeyi veya anahtar sözcüğü düzeltme
Visual Studio'da bir türü veya anahtar sözcüğü yanlışlıkla yanlış yazarsanız, bu Hızlı İşlem bunu sizin için otomatik olarak düzelter. Ampul menüsünde bu öğeleri "Yanlış yazılmış sözcüğü '<doğru sözcük>>' olarak değiştir<" olarak görürsünüz. Örneğin:
// Before
private viod MyMethod()
{
}
// Change 'viod' to 'void'
// After
private void MyMethod()
{
}
Hata Kimliği | Geçerli Diller |
---|---|
CS0103, BC30002 | C# ve Visual Basic |
Git birleştirme çakışmalarını çözme
Bu Hızlı Eylemler, çakışan kodu ve işaretçileri kaldıran "değişiklik yaparak" git birleştirme çakışmalarını çözmenizi sağlar.
// Before
private void MyMethod()
{
if (false)
{
}
}
// Take changes from 'HEAD'
// After
private void MyMethod()
{
if (true)
{
}
}
Hata Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
CS8300, BC37284 | C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
Gereksiz kodu kaldıran eylemler
Gereksiz kullanımı/İçeri Aktarmaları kaldırma
Gereksiz Kullanımları/İçeri Aktarmaları Kaldır Hızlı Eylemi, geçerli dosya için kullanılmayan using
ve Import
yönergeleri kaldırır. Bu öğeyi seçtiğinizde kullanılmayan ad alanı içeri aktarmaları kaldırılır.
Gereksiz atamayı kaldırma
Tür atama gerektirmeyen başka bir türe yayınlarsanız, Gereksiz Atamayı Kaldır Hızlı İşlem öğesi gereksiz atamayı kaldırır.
Kullanılmayan değişkenleri kaldırma
Bu Hızlı Eylem, bildirilen ancak kodunuzda hiç kullanılmayan değişkenleri kaldırmanıza olanak tanır.
// Before
public MyMethod()
{
var unused = 8;
var used = 1;
return DoStuff(used);
}
// Remove unused variables
// After
public MyMethod()
{
var used = 1;
return DoStuff(used);
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
CS0219, BC42024 | C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
Türü varsayılan değer ifadesinden kaldırma
Bu Hızlı Eylem, varsayılan değer ifadesinden değer türünü kaldırır ve derleyici ifadenin türünü çıkarabildiğinde varsayılan değişmez değeri kullanır.
// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }
// Simplify default expression
// After
void DoWork(CancellationToken cancellationToken = default) { ... }
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0034 | C# 7.1+ | Visual Studio 2017 sürüm 15.3 ve üzeri |
Eksik kod ekleyen eylemler
Başvuru derlemelerindeki türler, NuGet paketleri veya çözümünüzdeki diğer türler için usings/imports ekleme
Çözümünüzdeki diğer projelerde bulunan türlerin kullanılması Hızlı İşlem'i otomatik olarak görüntüler, ancak diğerlerinin Araçlar > Seçenekler > Metin Düzenleyicisi > C# veya Visual Basic > Gelişmiş sekmesinden etkinleştirilmesi gerekir:
Çözümünüzdeki diğer projelerde bulunan türlerin kullanılması Hızlı İşlem'i otomatik olarak görüntüler, ancak diğerlerinin Araçlar > Seçenekler Metin Düzenleyicisi > C# veya Temel > Gelişmiş sekmesinden > etkinleştirilmesi gerekir:
- Başvuru derlemelerindeki türler için kullanımı/içeri aktarmayı önerme
- NuGet paketlerindeki türler için kullanımı/içeri aktarmayı önerme
Etkinleştirildiğinde, şu anda içeri aktarılmayan ancak bir başvuru derlemesinde veya NuGet paketinde bulunan bir ad alanında bir tür kullanırsanız, using veya import yönergesi oluşturulur.
// Before
Debug.WriteLine("Hello");
// using System.Diagnostics;
// After
using System.Diagnostics;
Debug.WriteLine("Hello");
Tanılama Kimliği | Geçerli Diller |
---|---|
CS0103, BC30451 | C# ve Visual Basic |
Eksik servis talepleri/varsayılan servis talebi/her ikisi de ekleme
C# dilinde bir switch
deyim veya Select Case
Visual Basic'te deyim oluştururken, eksik servis talebi öğelerini, varsayılan servis talebi deyimini veya her ikisini de otomatik olarak eklemek için Kod Eylemi kullanabilirsiniz.
Aşağıdaki numaralandırmayı ve boş switch
veya Select Case
deyimini göz önünde bulundurun:
Her İkisi De Ekle Hızlı Eylemi kullanıldığında eksik durumlar doldurulur ve varsayılan bir büyük/küçük harf eklenir:
switch(myEnum)
{
case MyEnum.Item1:
break;
case MyEnum.Item2:
break;
case MyEnum.Item3:
break;
default:
break;
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0010 | C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
Parametreler için null denetimleri ekleme
Bu Hızlı Eylem, bir parametrenin null olup olmadığını söylemek için kodunuzda bir denetim eklemenize olanak tanır.
// 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));
}
}
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
Bağımsız değişken adı ekleme
// 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);
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
Küme ayraçları ekleme
Küme ayraçları ekle Hızlı Eylemi, ayraçları tek satırlı if
deyimler etrafında sarmalar.
// Before
if (true)
return "hello,world";
// Add braces
// After
if (true)
{
return "hello,world";
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0011 | C# | Visual Studio 2017 ve üzeri |
Değiştirici ekleme ve sıralama
Bu Hızlı Eylemler, var olanı sıralamanıza ve eksik erişilebilirlik değiştiricileri eklemenize olanak tanıyarak değiştiricileri düzenlemenize yardımcı olur.
// 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;
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0036 | C# ve Visual Basic | Visual Studio 2017 sürüm 15.5 ve üzeri |
IDE0040 | C# ve Visual Basic | Visual Studio 2017 sürüm 15.5 ve üzeri |
Kod dönüştürmeleri
'if' yapısını 'switch' olarak dönüştürme
Bu Hızlı Eylem, if-then-else yapısını bir anahtar yapısına dönüştürmenizi sağlar.
// 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;
}
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# ve Visual Basic | Visual Studio 2017 sürüm 15.3 ve üzeri |
İlişkili dizeye dönüştür
İlişkili dizeler, String.Format yöntemine benzer şekilde eklenmiş değişkenlerle dizeleri ifade etmenin kolay bir yoludur. Bu Hızlı Eylem, dizelerin birleştirildiği veya String.Format kullanıldığı durumları tanır ve kullanımı ilişkilendirilmiş bir dizeye değiştirir.
// 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";
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# 6.0+ ve Visual Basic 14+ | Visual Studio 2017 ve üzeri |
Nesne başlatıcıları kullanma
Bu Hızlı Eylem, oluşturucuyu çağırmak ve ek atama deyimleri satırlarına sahip olmak yerine nesne başlatıcıları kullanmanızı sağlar.
// Before
var c = new Customer();
c.Age = 21;
// Object initialization can be simplified
// After
var c = new Customer() { Age = 21 };
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0017 | C# ve Visual Basic | Visual Studio 2017 ve üzeri |
Koleksiyon başlatıcılarını kullanma
Bu Hızlı Eylem, sınıfınızın yöntemine birden çok çağrı yerine koleksiyon başlatıcılarını kullanmanıza Add
olanak tanır.
// 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 };
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0028 | C# ve Visual Basic | Visual Studio 2017 ve üzeri |
Otomatik özelliği tam özelliğe dönüştürme
Bu Hızlı İşlem, bir otomatik özelliği tam özelliğe dönüştürmenize olanak tanır ve tam tersi de geçerlidir.
// Before
private int MyProperty { get; set; }
// Convert to full property
// After
private int MyProperty
{
get { return _myProperty; }
set { _myProperty = value; }
}
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# ve Visual Basic | Visual Studio 2017 sürüm 15.5 ve üzeri |
Blok gövdesini ifade gövdeli üyeye dönüştürme
Bu Hızlı Eylem, blok gövdelerini yöntemler, oluşturucular, işleçler, özellikler, dizin oluşturucular ve erişimciler için ifade gövdeli üyelere dönüştürmenizi sağlar.
//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);
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0021-27 | C# 6.0+ | Visual Studio 2017 ve üzeri |
Anonim işlevi yerel işleve dönüştürme
Bu Hızlı Eylem anonim işlevleri yerel işlevlere dönüştürür.
// 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);
}
'ReferenceEquals' değerini 'is null' olarak dönüştürün
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0041 | C# 7.0+ | Visual Studio 2017 sürüm 15.5 ve üzeri |
Bu Hızlı Eylem, mümkün olduğunca kodlama deseni yerine desen eşleştirmenin ReferenceEquals
kullanılmasını önerir.
// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
return;
}
// Use 'is null' check
// After
var value = "someString";
if (value is null)
{
return;
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0039 | C# 7.0+ | Visual Studio 2017 sürüm 15. ve üzeri |
Desen eşleştirmeyi tanıtma
Bu Hızlı Eylem, C# dilinde atamalar ve null denetimlerle desen eşleştirmenin kullanılmasını önerir.
// 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)
{
...
}
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0020 | C# 7.0+ | Visual Studio 2017 ve üzeri |
IDE0019 | C# 7.0+ | Visual Studio 2017 ve üzeri |
Sayısal değişmez değerlerin tabanını değiştirme
Bu Hızlı Eylem, bir sayısal değişmez değeri bir temel sayısal sistemden diğerine dönüştürmenizi sağlar. Örneğin, bir sayıyı onaltılık veya ikili biçime değiştirebilirsiniz.
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# 7.0+ ve Visual Basic 14+ | Visual Studio 2017 sürüm 15.3 ve üzeri |
Değişmez değerlere basamak ayırıcıları ekleme
Bu Hızlı Eylem, değişmez değerlere ayırıcı karakterler eklemenize olanak tanır.
Geçerli Diller | Desteklenen Sürüm |
---|---|
C# 7.0+ ve Visual Basic 14+ | Visual Studio 2017 sürüm 15.3 ve üzeri |
Açık tanımlama grubu adlarını kullanma
Bu Hızlı Eylem, Öğe1, Öğe2 vb. yerine açık tanımlama grubu adının kullanılabildiği alanları tanımlar.
// 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;
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0033 | C# 7.0+ ve Visual Basic 15+ | Visual Studio 2017 ve üzeri |
Çıkarsanan adları kullanma
Bu Hızlı Eylem, kodun anonim türlerde çıkarılmış üye adlarını veya tanımlama gruplarındaki çıkarılmış öğe adlarını kullanmak için ne zaman basitleştirilebileceğini gösterir.
// 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);
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0037 | C# | Visual Studio 2017 sürüm 15.5 ve üzeri |
IDE0037 | C# 7.1+ | Visual Studio 2017 sürüm 15.5 ve üzeri |
Tanımlama grubu bildirimini kaldırma
Bu Hızlı Eylem, tanımlama grubu değişken bildirimlerinin yapılandırılmasını sağlar.
// 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}");
Tanılama Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
IDE0042 | C# 7.0+ | Visual Studio 2017 sürüm 15.5 ve üzeri |
Yöntemi zaman uyumlu hale getirme
Bir yöntemde veya Async
anahtar sözcüğü kullanılırkenasync
, bu yöntemin içinde veya Await
anahtar sözcüğü de await
kullanılması beklenir. Ancak bu durum geçerli değilse, veya Async
anahtar sözcüğünü kaldırıp async
dönüş türünü değiştirerek yöntemi zaman uyumlu hale getiren bir Hızlı Eylem görüntülenir. Hızlı Eylemler menüsündeki Yöntemi zaman uyumlu yap seçeneğini kullanın.
// Before
async Task<int> MyAsyncMethod()
{
return 3;
}
// Make method synchronous
// After
int MyAsyncMethod()
{
return 3;
}
Hata Kimliği | Geçerli Diller |
---|---|
CS1998, BC42356 | C# ve Visual Basic |
Yöntemi zaman uyumsuz yapma
Bir yöntemin await
içinde veya Await
anahtar sözcüğünü kullanırken, yöntemin veya Async
anahtar sözcüğüyle async
işaretlenmesi beklenir. Ancak, durum bu değilse, yöntemi zaman uyumsuz hale getiren bir Hızlı İşlem görüntülenir. Hızlı Eylemler menüsünden Yöntemi/İşlevi zaman uyumsuz yap seçeneğini kullanın.
// Before
int MyAsyncMethod()
{
return await Task.Run(...);
}
// Make method asynchronous
// After
async Task<int> MyAsyncMethod()
{
return await Task.Run(...);
}
Hata Kimliği | Geçerli Diller | Desteklenen Sürüm |
---|---|---|
CS4032, BC37057 | C# ve Visual Basic | Visual Studio 2017 ve üzeri |