Aracılığıyla paylaş


CA1877: 'Path.Combine' veya 'Path.Join' aşırı yüklemelerini kullanın

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.

Ayrıca bakınız