C# 什么';双人间的区别是什么?一个双人间,为什么可以';我不能隐式地转换它们吗?
VisualStudio对我大喊大叫,在数据库中它是一个浮点,在我的课堂上它是一个双精度。为什么我不能分配它,为什么它认为它是“双精度” 下面第三行C# 什么';双人间的区别是什么?一个双人间,为什么可以';我不能隐式地转换它们吗?,c#,linq-to-sql,C#,Linq To Sql,VisualStudio对我大喊大叫,在数据库中它是一个浮点,在我的课堂上它是一个双精度。为什么我不能分配它,为什么它认为它是“双精度” 下面第三行 Confirmation confirm = new Confirmation(); confirm.order = theOrder; confirm.totalPrice = theOrder.BillingAmount; 这是确认书 public class Confirmation {
Confirmation confirm = new Confirmation();
confirm.order = theOrder;
confirm.totalPrice = theOrder.BillingAmount;
这是确认书
public class Confirmation
{
public Order order;
public List<OrderItem> allProducts;
public double totalPrice;
}
公共类确认
{
公共秩序;
公开列出所有产品;
公共双总价;
}
下面是BillingAmount DEF,我认为它是由.dbml draggy 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();
}
}
}
[Column(Storage=“\u BillingAmount”,DbType=“Float”)]
公共系统。可为空的BillingAmount
{
得到
{
把这个还给我;
}
设置
{
如果((此._BillingAmount!=值))
{
此.onBillingAmountChanged(值);
此参数为.SendPropertyChanging();
这个。_BillingAmount=值;
此项。SendPropertyChanged(“BillingAmount”);
此.OnBillingAmountChanged();
}
}
}
双人房?是可以表示“未知”值以及确定双精度的双精度的可空版本。double和float的区别在于double的精度和范围是float的两倍
因此,您应该能够隐式地将任何float转换为double,但不是相反,就像您可以将任何短整数(-32768到+32769)转换为长整数(-20亿到+20亿),而不是相反
编辑:
因此,您也可以隐式地将一个double转换为一个可为null的double(double?),但不能反过来(它可能为null)
但是您仍然可以显式地转换可为null的double。如果它有一个确定的值,那么您可以通过强制转换它,或者通过访问double的“value”属性来转换它
double? nulbleDbl = 123.456;
double? nullDbl = null;
double x = nulbleDbl.Value; //works just fine
double y = nullDbl.Value; // fails with convert error or cast error
bool isOk = nullDbl.HasValue; // returns false
双人房?是可以表示“未知”值以及确定双精度的双精度的可空版本。double和float的区别在于double的精度和范围是float的两倍 因此,您应该能够隐式地将任何float转换为double,但不是相反,就像您可以将任何短整数(-32768到+32769)转换为长整数(-20亿到+20亿),而不是相反 编辑: 因此,您也可以隐式地将一个double转换为一个可为null的double(double?),但不能反过来(它可能为null) 但是您仍然可以显式地转换可为null的double。如果它有一个确定的值,那么您可以通过强制转换它,或者通过访问double的“value”属性来转换它
double? nulbleDbl = 123.456;
double? nullDbl = null;
double x = nulbleDbl.Value; //works just fine
double y = nullDbl.Value; // fails with convert error or cast error
bool isOk = nullDbl.HasValue; // returns false
double?
是Nullable
的缩写。这是一种完全不同的类型。我记得您可以在它们之间进行隐式转换,但只能在一个方向(从double
到double?
)。另一个方向没有意义,因为在double?
为空的情况下,不存在转换。数据库代码使用可空双精度码的原因是,在数据库中,该值可能为空。double?
是可空双精度码的缩写。这是一种完全不同的类型。我记得您可以在它们之间进行隐式转换,但只能在一个方向(从double
到double?
)。另一个方向没有意义,因为在double?
为空的情况下,不存在转换。数据库代码使用可空双精度的原因是,在数据库中,该值可能为空。在db中,如果您的列可空,则在C中表示为可空。double是一种值类型,不能为null…但在db术语中,这是完全合法的。这就是.Net具有Nullable
类型的原因。可以通过执行以下任一操作将其值指定给double
double d = nullableDouble ?? 0;
double d = (nullableDouble.HasValue) ? nullableDouble.Value : 0;
等等。在数据库中,如果您的列可为null,则在C中表示为可为null
。double是一种值类型,不能为null…但在db术语中,这是完全合法的。这就是.Net具有Nullable
类型的原因。可以通过执行以下任一操作将其值指定给double
double d = nullableDouble ?? 0;
double d = (nullableDouble.HasValue) ? nullableDouble.Value : 0;
等等。转换双精度的方法?双人间是:
double? nullDouble = null;
double normaDouble = nullDouble ?? 0;
// where 0 is the default value used if nullDouble is null
这与:
normalDouble = (nullDouble.HasValue) ? nullDouble.Value : 0;
或
normalDouble=(nullDouble!=null)?nullDouble。值:0 转换双精度的方法是什么?双人间是:
double? nullDouble = null;
double normaDouble = nullDouble ?? 0;
// where 0 is the default value used if nullDouble is null
这与:
normalDouble = (nullDouble.HasValue) ? nullDouble.Value : 0;
或
normalDouble=(nullDouble!=null)?nullDouble。值:0 您在DB中的列必须允许空值,因为一个double?已生成。因此,如果它可以为null,则意味着它可能无法从程序中获取值。所以也许你应该选择双倍?或者double,但要在任何地方都使用它(可能不允许在DB中使用null)。您在DB中的列必须允许使用null,因为double?已生成。因此,如果它可以为null,则意味着它可能无法从程序中获取值。所以也许你应该选择双倍?或者双精度,但要在任何地方都使用它(可能不允许在DB中使用null)。那么我应该在我想使用它的另一个对象中将其设置为可为null的对象,还是有好的转换方法?@Ryan,如果它是一个可为null的对象,并且ity有一个确定的值,那么您可以通过强制转换或访问“值”来显式转换它double的属性?那么我应该在我想使用它的另一个对象中将其设置为可为null的对象,还是有一种转换的好方法?@Ryan,如果它是一个可为null的对象,并且ity有一个确定的值,那么你可以通过强制转换它,或者通过访问double的“value”属性来显式转换它?这是代码,我注意到了可为空的东西,然后我看到了du