Aracılığıyla paylaş


Hata ayıklama yöntemlerinde koşullu dize değerlendirmesi

İlişkilendirilmiş dizelerin onay iletileri olarak kullanılması yaygındır, örneğin:

Debug.Assert(result != x, $"Unexpected result {result}");

Ancak, önceki sürümlerde bu durum, koşul olsa bile her çağrıda biçimlendirme sonucu da dahil olmak üzere ileti için bir dize oluşturulmasına neden olur true. Ve onaylar için tipik kullanım, her zaman doğru olması gereken bir koşul hakkında olmalarıdır.

C# 10, dizelere ek olarak özel "işleyicileri" hedefleme özelliği de dahil olmak üzere daha iyi dize ilişkilendirme desteği ekler. .NET 6'da sınıfıDebug, yalnızca ileti gerekliyse, ilişkilendirilmiş dize biçimlendirme öğelerini koşullu olarak değerlendirmek için bu işlevi kullanan yeni , WriteIfWriteLineIf aşırı yüklemelerine Assertsahiptir. C# derleyicisi bu yeni aşırı yüklemeleri tercih edecektir. Biçimlendirme öğeleri sessize alınıyorsa ve onay tetiklenmese bile program bu mutasyonların görünür olmasına güveniyorsa, davranışta bir fark gözlemleyebilirsiniz.

Önceki davranış

Aşağıdaki kodda r.ToString() her zaman çağrılır.

Debug.Assert(true, $"{r.ToString()}");

Yeni davranış

Aşağıdaki kodda hiçbir r.ToString() zaman çağrılmayacak, çünkü ileti yalnızca koşul olduğunda falsegereklidir.

Debug.Assert(true, $"{r.ToString()}");

Sürüm kullanıma sunulmuştur

6.0 RC 1

Hataya neden olan değişikliğin türü

Bu değişiklik kaynak uyumluluğunu etkileyebilir.

Değişiklik nedeni

Bu değişiklik performansı geliştirmek için kullanıma sunulmuştur.

Yöntemlerle Debug kullanılan ilişkilendirilmiş dizeler paylaşılan durumu kapatmamalıdır. (Bu yöntemler de derleme sabiti DEBUG üzerinde koşullu.) Herhangi bir nedenle, eski davranışı korumak kritikse, ilişkilendirme dizesinden önce bir (string) atama ekleyin. Bu atama, derleyiciyi mevcut aşırı yüklemeye bağlamaya zorlar ve dizenin her zaman gerçekleştirilmesini sağlar.

Etkilenen API’ler