Ülejäänud tööd annab valed tulemused .NET Framework 3.5 ja 4.0

Kokkuvõte

Kui kasutate .NET Framework 3.5 või .NET Framework 4,0 kasutaja moodul, tagastatakse valed tulemused. Täpsemalt, see probleem ilmneb, kui käivitate ülejäänud tööd ja kui kasutate teatud 64-bitine täisarv väärtustest x86 arhitektuur.

Järgmine näidiskood näitab probleemi.

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);
}
}

Siin on väljund 93 asemel õige tulemuse -7.

Lisateabe saamiseks

Probleemi juhtub ülejäänud töö ja ainult 64-bitise täisarvud all x86 arhitektuur. See probleem ei mõjuta muid toiminguid ja see on kindlaks määratud .NET Framework 4.5 all kõik arhitektuure.

Lahendus

Kuna see probleem on lahendatud .NET Framework 4.5, soovitame võtta kasutusele kui võimalik. Kui täiendamine ei ole võimalik, kasutage ühte järgmistest lahendustest.

  • Kasutage selle asemel kasutatakse const int, int.

  • Staatiline intkasutada.

Pange tähele parandatud järgmine kood:

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);
}
}

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×