.NET Framework 3.5 ve 4.0 işlemini yanlış sonuçlar döndürüyor

Özet

.NET Framework 3.5 veya .NET Framework 4.0 modül işleci kullandığınızda, hatalı sonuçlar döndürülür. Özellikle, kalan işlem ve x86 belirli 64-bit tamsayı değerleri kullandığınızda çalıştırdığınızda, bu sorun oluşur mimarisi.

Aşağıdaki örnek kod, bu sorunu göstermektedir:

class Program    {
static void Main(string[] args)
{
DoModulo();
}

public static void DoModulo()
{
const int LNXBASE = 100;
long longX = -856480339907;
var mod = longX % LNXBASE;
Console.WriteLine(mod);
}
}

93 -7 doğru sonucu yerine çıktı İşte.

Daha fazla bilgi

Bu sorun remainder işlemi tarafından ve yalnızca 64-bit tamsayı x86 altında tetiklenir mimarisi. Bu sorun diğer işlemleri etkilemez ve.NET Framework 4.5 altında tüm mimariler için giderilmiştir.

Geçici çözüm

Bu sorun için.NET Framework 4.5 düzeltilmiş olduğundan, mümkünse yükseltmenizi öneririz. Yükseltme mümkün değilse, aşağıdaki geçici çözümlerden birini kullanın:

  • Const Intkullanmak yerine, intkullanırlar.

  • Static intkullanırlar.

Not: Aşağıdaki kod düzeltildi.

class Program    {
static void Main(string[] args)
{
DoModulo();
}

static int LNXBASE = 100;

public static void DoModulo()
{
long longX = -856480339907;
var mod = longX % LNXBASE;
Console.WriteLine(mod);
}
}

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yardımcı oldu mu?

Geri bildiriminiz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×