Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Umum untuk menggunakan string terinterpolasi sebagai pesan pernyataan, misalnya:
Debug.Assert(result != x, $"Unexpected result {result}");
Namun, di versi sebelumnya, ini menyebabkan string dibuat untuk pesan, termasuk hasil pemformatan, pada setiap panggilan, bahkan jika kondisinya adalah true. Dan penggunaan umum untuk penegasan adalah bahwa itu menyangkut kondisi yang harus selalu benar.
C# 10 menambahkan dukungan untuk interpolasi string yang lebih baik, termasuk kemampuan untuk menargetkan "handler" kustom selain string. Di .NET 6, kelas Debug memiliki overload baru pada Assert, WriteIf, dan WriteLineIf yang menggunakan fungsionalitas ini untuk hanya mengevaluasi item pemformatan string terinterpolasi jika pesan diperlukan. Pengkompilasi C# akan lebih memilih kelebihan beban baru ini. Jika item pemformatan bermutasi status dan program mengandalkan mutasi tersebut untuk terlihat bahkan jika pernyataan tidak diaktifkan, Anda dapat mengamati perbedaan perilaku.
Perilaku sebelumnya
Dalam kode berikut, r.ToString() akan selalu dipanggil.
Debug.Assert(true, $"{r.ToString()}");
Perilaku baru
Dalam kode berikut, r.ToString() tidak akan pernah dipanggil, karena pesan hanya diperlukan jika kondisinya adalah false.
Debug.Assert(true, $"{r.ToString()}");
Versi yang diperkenalkan
6.0 RC 1
Jenis perubahan yang memutus kompatibilitas
Perubahan ini dapat memengaruhi kompatibilitas sumber .
Alasan perubahan
Perubahan ini diperkenalkan untuk meningkatkan performa.
Tindakan yang direkomendasikan
String yang diinterpolasi yang digunakan pada metode Debug tidak boleh mengubah status bersama. (Metode ini juga bergantung pada DEBUG konstanta kompilasi.) Jika, karena alasan tertentu, sangat penting untuk mempertahankan perilaku lama, tambahkan cast (string) sebelum string terinterpolasi. Konversi tipe ini memaksa kompiler untuk mengikat ke overload yang ada dan memastikan bahwa string selalu direalisasikan.
API yang terpengaruh
- System.Diagnostics.Debug.Assert(Boolean, String)
- System.Diagnostics.Debug.Assert(Boolean, String, String)
- System.Diagnostics.Debug.Assert(Boolean, String, String, Object[])
- System.Diagnostics.Debug.WriteIf(Boolean, String)
- System.Diagnostics.Debug.WriteIf(Boolean, String, String)
- System.Diagnostics.Debug.WriteIf(Boolean, Object, String)
- System.Diagnostics.Debug.WriteLineIf(Boolean, String)
- System.Diagnostics.Debug.WriteLineIf(Boolean, String, String)
- System.Diagnostics.Debug.WriteLineIf(Boolean, Object, String)