Bagikan melalui


Perilaku pergeseran yang konsisten dalam matematika generik

Operasi shift dalam matematika generik sekarang memiliki perilaku yang konsisten di semua jenis bilangan bulat bawaan.

Perilaku sebelumnya

Sebelumnya, perilaku saat menggunakan matematika generik untuk melakukan pergeseran pada T bisa berbeda berdasarkan jenisnya. Dalam beberapa kasus, sistem berhasil mengaburkan jumlah pergeseran dengan sizeof(T) - 1. Dan dalam kasus lain, tidak ada penyamaran. Ini berarti bahwa "overshifting" (seperti menggeser byte sebanyak 8) dapat menghasilkan jawaban yang berbeda dari yang diharapkan.

Perilaku baru

Implementasi diperbarui untuk menyembunyikan jumlah pergeseran yang sesuai, guna memastikan perilaku yang konsisten di semua tipe bilangan bulat bawaan dan dengan perilaku yang dipaparkan oleh antarmuka System.Numerics.IShiftOperators<TSelf,TOther,TResult>.

Versi yang diperkenalkan

.NET 10

Jenis perubahan yang merusak

Perubahan ini adalah perubahan perilaku .

Alasan perubahan

Perilaku berbeda dari perilaku yang dirancang karena perbedaan cara kerja masking untuk jenis bilangan bulat kecil di C#.

Perbarui kode apa pun yang bergantung pada perilaku tidak konsisten sebelumnya untuk memastikan kode berfungsi dengan perilaku konsisten baru.

API yang terpengaruh

  • operator <<
  • operator >>
  • operator >>> untuk byte, char, sbyte, short, dan ushort saat digunakan melalui matematika generik, yang memerlukan T yang dibatasi untuk where T : IShiftOperators<T, int, T> atau antarmuka serupa.