Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1806 |
| Başlık | Metot sonuçlarını yoksaymayın |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
Bu uyarının birkaç olası nedeni vardır:
- Yeni bir nesne oluşturulur ancak hiçbir zaman kullanılmaz.
- Yeni dize oluşturan ve döndüren bir yöntem çağrılır ve yeni dize hiçbir zaman kullanılmaz.
- COM veya P/Invoke yöntemi, hiç kullanılmayan bir
HRESULTveya hata kodu döndürür. - Dille tümleşik sorgu (LINQ) yöntemi, hiç kullanılmayan bir sonuç döndürür.
- Bir
[Pure]yöntem çağrılır ve dönüş değeri hiçbir zaman kullanılmaz.
Kural açıklaması
Gereksiz nesne oluşturma ve kullanılmayan nesnenin ilişkili çöp toplama işlemi performansı düşürür.
Dizeler değiştirilemez ve String.ToUpper gibi yöntemler, çağrılan yöntemin içindeki dize örneğini değiştirmeden dizenin yeni bir örneğini döndürür.
Bir HRESULT veya hata kodunu yok saymak, düşük kaynak durumlarına veya hata durumu yaşandığında beklenmeyen davranışlara yol açabilir.
PureAttribute ile açıklama eklenmiş yöntemlerin ve LINQ yöntemlerinin yan etkileri olmadığı bilinmektedir ve bu yöntemlerin sonucu göz ardı edilmemelidir.
İhlalleri düzeltme
Bir yöntem, hiç kullanılmayan bir nesnenin yeni bir örneğini oluşturursa, örneği bağımsız değişken olarak başka bir yönteme geçirin veya örneği bir değişkene atayın. Nesne oluşturma işlemi gereksizse kaldırın.
-veya-
A yöntemi B yöntemini çağırır ancak B yönteminin döndürdüğü yeni dize örneğini kullanmıyorsa, örneği başka bir yönteme bağımsız değişken olarak geçirin veya örneği bir değişkene atayın. Veya gereksizse aramayı kaldırın.
-veya-
A yöntemi B yöntemini çağırır ancak B yönteminin döndürdüğü sonucu veya hata kodunu kullanmıyorsa, sonucu koşullu bir deyimde kullanın, onu bir değişkene atayın veya başka bir yönteme bağımsız değişken olarak aktarın.
-veya-
A yöntemi bir LINQ veya saf B yöntemini çağırır ancak sonucu kullanmıyorsa, sonucu koşullu bir deyimde kullanın, sonucu bir değişkene atayın veya başka bir yönteme bağımsız değişken olarak geçirin.
Uyarıların ne zaman bastırılması gerekiyor?
Nesne oluşturma eylemi bir amaca hizmet etmediği sürece bu kuraldan bir uyarıyı bastırmayın.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Zorlamak için ek yöntemler
Bu kuralı, ek özelleştirilmiş API'lerden gelen sonuçların kullanıldığını denetlemek için yapılandırabilirsiniz. Seçeneğin değeriadditional_use_results_methods olarak bir veya daha fazla yöntem belirtin. Birden çok yöntem adı belirtmek için bunları | ile ayırın. Yöntem adı için izin verilebilen biçimler şunlardır:
- Yalnızca yöntem adı (türü veya ad alanı ne olursa olsun, bu ada sahip tüm yöntemleri içerir).
-
Belge Kimliği formatında tam nitelikli ad, isteğe bağlı bir
M:ön ek ile birlikte.
Örneğin, CA1806 kuralının da adlı MyMethod1 bir yöntemden elde edilen sonucun kullanılabileceğini denetlemesi gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin.
dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1
Alternatif olarak, tam adı kullanarak belirsizliği gidermek veya sadece bu ada sahip olan belirli bir yöntemin dahil olduğundan emin olun.
dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)
Örnek 1
Aşağıdaki örnekte çağrısının String.Trimsonucunu yoksayan bir sınıf gösterilmektedir.
public class Book
{
public Book(string title)
{
// Violates this rule.
title?.Trim();
Title = title;
}
public string? Title { get; }
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Aşağıdaki örnek, çağrıldığı değişkene geri sonucunu String.Trim atayarak ihlali düzeltir.
public class Book
{
public Book(string title)
{
// Fixes the violation.
Title = title?.Trim();
}
public string? Title { get; }
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
Örnek 2
Aşağıdaki örnekte, oluşturduğu bir nesneyi kullanmayan bir yöntem gösterilmektedir.
Not
Bu ihlal Visual Basic'te yeniden oluşturulamaz.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Violates this rule.
new Book();
return new Book();
}
}
Aşağıdaki örnek, bir nesnenin gereksiz oluşturulmasını kaldırarak ihlali düzeltir.
public class Book
{
public Book() { }
public static Book CreateBook()
{
// Fixes the violation.
return new Book();
}
}