Aracılığıyla paylaş


Sayısal biçim dizeleri için en yüksek duyarlık

kullanarak sayıları dize ToString TryFormat olarak biçimlendirirken en yüksek duyarlık 999.999.999 olarak Int32.MaxValue değiştirildi. (En yüksek duyarlık daha önce .NET 6'da olarak Int32.MaxValue değiştirildi.)

Buna ek olarak, bir BigInteger dizeden ayrıştırma sırasında izin verilen en yüksek üs 999.999.999 ile sınırlandırılmıştır.

Önceki davranış

.NET 6'da standart sayısal biçim ayrıştırma mantığının duyarlığı veya daha azı Int32.MaxValue sınırlıydı. Amaçlanan davranış, değerinden Int32.MaxValuebüyük herhangi bir duyarlık için bir FormatException oluşturmaktı. Ancak bir hata nedeniyle .NET 6 bu tür girişler için bu özel durumu oluşturmadı. Amaçlanan davranış:

double d = 123.0;

d.ToString("E" + int.MaxValue.ToString()); // Doesn't throw.

long intMaxPlus1 = (long)int.MaxValue + 1;
string intMaxPlus1String = intMaxPlus1.ToString();
Assert.Throws<FormatException>(() => d.ToString("E" + intMaxPlus1String)); // Throws.

Ayrıca, bir dizeden ayrıştırırken üs boyutu üzerinde bir BigInteger sınır yoktu.

Yeni davranış

.NET 7'den başlayarak .NET, 999.999.999'a kadar duyarlığı destekler. FormatException Duyarlık 999.999.999'dan büyükse bir oluşturulur. Bu değişiklik, tüm sayısal türleri etkileyen ayrıştırma mantığında uygulandı.

double d = 123.0;
Assert.Throws<FormatException>(() => d.ToString("E" + int.MaxValue.ToString())); // Throws.

long intMaxPlus1 = (long)int.MaxValue + 1;
string intMaxPlus1String = intMaxPlus1.ToString();
Assert.Throws<FormatException>(() => d.ToString("E" + intMaxPlus1String)); // Throws.

d.ToString("E999999999"); // Doesn't throw.

d.ToString("E00000999999999"); // Doesn't throw.

Ayrıca, bir BigInteger dizeden 999.999.999'dan büyük bir üsle bir ayrıştırmaya çalışırsanız, a FormatException oluşturulur.

Sürüm kullanıma sunulmuştur

.NET 7

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

Bu değişiklik ikili uyumluluğu etkileyebilir.

Değişiklik nedeni

.NET 6'da tanıtılan davranış, değerinden Int32.MaxValuebüyük herhangi bir duyarlık için bir FormatException oluşturmak için tasarlanmıştır. Ancak, bir hata nedeniyle, en büyükten büyük bazı girişler için bu özel durumu oluşturmadı. Bu değişiklik, duyarlığı 999.999.999 ile sınırlayarak hatayı düzeltir.

Çoğu durumda, biçim dizelerinizde zaten 999.999.999'dan yüksek bir duyarlık kullanmanız pek olası olmadığından hiçbir eylem gerekmez.

Etkilenen API’ler

Bu değişiklik, tüm sayısal türleri etkileyen ayrıştırma mantığında uygulandı.

Ayrıca bkz.