Also arbeite ich an einem auf Chemie basierenden Projekt und bin auf dieses heikle Problem gestoßen. Ich habe eine Reihe von Funktionen, die Chemie-Berechnungen durchführen und die Avogadros-Zahl als Standardparameter für eine Funktion übergeben wollen. Lassen Sie mich den Code einfach sprechen lassen:
%Vor%Bearbeiten: war nicht exponentiell Format, danke Jungs
Sie können im Allgemeinen nicht. Alles, was einen Methodenaufruf beinhaltet, ist nicht , was eine Kompilierzeitkonstante ist, was den Compiler betrifft.
Was Sie tun können, ist ein double
literal, das jedoch die wissenschaftliche Notation verwendet:
Also in diesem speziellen Fall können Sie es ohne Lesbarkeitsverlust schreiben.
In anderen Einstellungen, solange der Typ einer der primitiven Typen oder decimal
ist, können Sie die Konstante einfach als Literal ausgeben und einen Kommentar verwenden, um zu erklären, wie Sie ihn erhalten haben. Zum Beispiel:
Beachten Sie, dass, obwohl Methodenaufrufe nicht in konstanten Ausdrücken verwendet werden können, andere Operatoren dies können. Zum Beispiel:
%Vor%Siehe Abschnitt 7.19 der C # 5-Spezifikation für weitere Details darüber, was in einem konstanten Ausdruck erlaubt ist.
Für eine Konstante zur Kompilierungszeit müssen Sie das Schlüsselwort const
verwenden. Aber um es zu verwenden, muss Ihr Ausdruck selbst eine Kompilierzeitkonstante sein, wie Sie bemerkt haben: Sie können keine Funktionen wie Math.Pow
verwenden.
Wenn Sie Ihre Konstante nicht zu einer Kompilierzeitkonstante überarbeiten können oder wollen, können Sie sie nicht in Kompilierungskontexten verwenden, aber Sie könnten dies umgehen, indem Sie sie überladen, so dass ein Laufzeitwert als
(Der Wert der Konstante ist übrigens entweder falsch oder hat einen sehr irreführenden Namen. Er sollte höchstwahrscheinlich 6.022E+23
sein.)
Definieren Sie einfach die Avogadros-Nummer als wissenschaftliche Notation:
%Vor%Tags und Links c#