In F # Interactive funktioniert der folgende Code:
%Vor%In einem kompilierten F # -Programm erscheint jedoch eine Fehlermeldung:
%Vor% Was ist dort passiert? Liegt es daran, dass die verschiedenen Referenzen (und Versionen von Referenzen) zwischen F # Versionen verwendet werden? oder die internen Repräsentationen von decimal
unterscheiden sich in kompilierten und interpretierten Modi.
Dies liegt wahrscheinlich daran, dass Ihr F # -kompiliertes Programm auf .NET Framework 2.0 / F # 2.0 abzielt. F # interactive verwendet .NET Framework 4.0 / F # 4.0.
Das 2.0 Framework verwendet den BigInteger
in FSharp.Core. Das 4.0 Framework verwendet System.Numerics.BigInteger
. Der FSharp.Core hat nicht die Konvertierung in Dezimal.
Ändern Sie Ihr Projekt in .NET .NET 4.0 und fügen Sie einen Verweis auf System.Numerics hinzu, und alles sollte übereinstimmen.
Sie haben Recht, dass es eine gewisse Inkonsistenz gibt, ob BigInteger
mit der Funktion decimal
konvertiert werden kann oder nicht. Es scheint von der Version von .NET abhängig zu sein, für die Sie kompilieren. Wenn Sie den F # -Compiler (oder F # interaktiv) von Visual Studio 2010 verwenden, ist das Standardziel .NET 4.0. Für dieses Ziel funktioniert die Kompilierung gut:
Sie können das Zielframework ändern, indem Sie explizit auf die .NET 2.0-Version von mscorlib.dll
und FSharp.Core.dll
verweisen. Dann meldet der Compiler den von Ihnen beschriebenen Fehler:
Wenn Sie beim Kompilieren des Projekts den Fehler erhalten, ist Ihr Projekt wahrscheinlich so konfiguriert, dass es für .NET 2.0 kompiliert wird.
Tags und Links f# type-conversion decimal