Was ist der Unterschied zwischen einem double? und ein Doppel-und warum kann ich nicht implizit konvertiert Sie?
Visual studio ist mich anzuschreien, in der Datenbank ist es ein float, und in meiner Klasse ist es ein double. Warum kann ich nicht zuordnen und warum Sie denken, es ist ein 'double?' ?
ZEILE DARUNTER DREI
Confirmation confirm = new Confirmation();
confirm.order = theOrder;
confirm.totalPrice = theOrder.BillingAmount;
HIER IST die Bestätigung DEF
public class Confirmation
{
public Order order;
public List<OrderItem> allProducts;
public double totalPrice;
}
HIER IST BillingAmount DEF von code-ich denke, generiert aus .dbml-draggy-von droppy...
[Column(Storage="_BillingAmount", DbType="Float")]
public System.Nullable<double> BillingAmount
{
get
{
return this._BillingAmount;
}
set
{
if ((this._BillingAmount != value))
{
this.OnBillingAmountChanging(value);
this.SendPropertyChanging();
this._BillingAmount = value;
this.SendPropertyChanged("BillingAmount");
this.OnBillingAmountChanged();
}
}
}
- Zeigen Sie den code bitte..
- es ist der code, bemerkte ich, das null-Werte zulässt Sache und dann sah ich die dudes Kommentar unten, ist es ein guter Weg, um zu konvertieren, oder sollte ich damit es eine Dezimalzahl? in meine Klasse?
- überprüfen Sie meine bearbeitete Antwort...
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der db, wenn die Spalte null-Werte zulässt, ist dies dargestellt in C# als
Nullable<double>
. Doppel, wobei ein Wert geben, kann nicht null sein...aber in den db-Bedingungen ist dies vollkommen legal. Das ist, warum .Netto hat dieNullable<T>
geben. Sie können zuweisen, dessen Wert um ein doppeltes, indem Sie einen der folgendenetc...
double?
ist die Kurzform fürNullable<double>
. Es ist eine ganz andere Art. Meine Erinnerung ist, dass Sie kann implizit konvertieren zwischen Ihnen, aber nur in eine Richtung (ausdouble
zudouble?
). Die andere Richtung ist nicht sinnvoll, weil in dem Fall, wo diedouble?
null ist, wird keine Konvertierung existieren würde. Der Grund, warum die Datenbank-code verwendet eine null-double ist, weil in der Datenbank, könnte der Wert eventuell NULL sein.Den Weg, um zu konvertieren ein double? um eine doppelte ist:
dies ist das gleiche wie:
bzw.
normalDouble = (nullDouble != null) ? nullDouble.Wert : 0;
Doppel? ist eine null-version von einem double vertreten kann, eine "unbekannt" - Wert, sowie eine definitive Doppel. Der Unterschied zwischen einer Doppel-und ein float ist, dass ein Doppel hat zweimal die Präzision und die Reichweite, dass ein float hat.
So dass Sie sollten in der Lage sein, implizit konvertieren von float in eine doppelte, aber nicht die andere Weise herum, wie können Sie konvertieren alle short integer ( von-32.768 bis +32769) in einer langen ( - 2 Mrd bis + 2 Mrd EUR), bit nicht die andere Weise herum.
BEARBEITEN:
So können Sie auch implizit konvertiert einen double in einen nullable-Doppel - (Doppel -?) aber nicht die andere Weise herum (es könnte null sein).
Aber können Sie immer noch konvertieren eine null-Doppel - Explizit. wenn es einen bestimmten Wert, dann können Sie wandeln es durch Umwandlung oder durch Zugriff auf die "Value" - Eigenschaft des double?
Ihre Spalte in der DB muss Erlaubt sein, Null-Werte, da eine doppelt? generiert wurde. So wenn Sie kann null sein, das bedeutet, es ist möglich, dass es nicht einen Wert aus Ihrem Programm. Vielleicht sollten Sie also wählen zwischen Doppel? - oder Doppelzimmer, aber mit zu arbeiten, dass überall (und vielleicht nicht erlaubt null-Werte in der DB).