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.
| Mülkiyet | Değer |
|---|---|
| Kural Kimliği |
CA1877 |
| Başlık | Kullanma Path.Combine veya Path.Join aşırı yüklemeler |
| Kategori | Performans |
| Düzeltme kırılgan mı yoksa sağlam mı | Non-breaking |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
Nedeni
Yol oluşturmak için ardışık Path.Combine birden çok işlem veya Path.Join işlem kullanılır.
Kural açıklaması
Ardışık Path.Combine birden çok işlem veya Path.Join işlem kullandığınızda, birden çok yol kesimi kabul eden bir aşırı yükleme kullanmak daha verimlidir. Bu yaklaşım ayırma ve işlev çağrılarının sayısını azaltarak performansı artırır. Her iki yöntem de birden çok parametre kabul eden aşırı yüklemeler sağlayarak ardışık işlemleri tek bir çağrıya daraltmanıza olanak sağlar.
İhlalleri düzeltme
Tüm yol kesimlerini kabul eden bir aşırı yükleme kullanarak ardışık Path.Combine veya Path.Join işlemleri tek bir çağrıyla değiştirin.
Bu dönüşümü otomatik olarak gerçekleştiren bir kod düzeltmesi kullanılabilir.
Example
Aşağıdaki kod parçacığı CA1877 ihlalini gösterir:
public string GetFilePath(string folder, string subfolder, string filename)
{
// Violation.
string temp = Path.Combine(folder, subfolder);
return Path.Combine(temp, filename);
}
public string GetLogPath(string baseDir, string date, string category)
{
// Violation.
return Path.Join(Path.Join(baseDir, date), category);
}
Public Function GetFilePath(folder As String, subfolder As String, filename As String) As String
' Violation.
Dim temp As String = Path.Combine(folder, subfolder)
Return Path.Combine(temp, filename)
End Function
Public Function GetLogPath(baseDir As String, [date] As String, category As String) As String
' Violation.
Return Path.Join(Path.Join(baseDir, [date]), category)
End Function
Aşağıdaki kod parçacığı ihlali düzeltir:
public string GetFilePath(string folder, string subfolder, string filename)
{
// No violation.
return Path.Combine(folder, subfolder, filename);
}
public string GetLogPath(string baseDir, string date, string category)
{
// No violation.
return Path.Join(baseDir, date, category);
}
Public Function GetFilePath(folder As String, subfolder As String, filename As String) As String
' No violation.
Return Path.Combine(folder, subfolder, filename)
End Function
Public Function GetLogPath(baseDir As String, [date] As String, category As String) As String
' No violation.
Return Path.Join(baseDir, [date], category)
End Function
Uyarıların ne zaman bastırılması gerekiyor?
Performans önemli değilse, bu kuraldan gelen bir uyarıyı engellemek güvenlidir.
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 CA1877
// The code that's violating the rule is on this line.
#pragma warning restore CA1877
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, none önem derecesini olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1877.severity = none
Daha fazla bilgi için bkz. Kod analizi uyarılarını gizleme.