C# 什么';双人间的区别是什么?一个双人间,为什么可以';我不能隐式地转换它们吗?

C# 什么';双人间的区别是什么?一个双人间,为什么可以';我不能隐式地转换它们吗?,c#,linq-to-sql,C#,Linq To Sql,VisualStudio对我大喊大叫,在数据库中它是一个浮点,在我的课堂上它是一个双精度。为什么我不能分配它,为什么它认为它是“双精度” 下面第三行 Confirmation confirm = new Confirmation(); confirm.order = theOrder; confirm.totalPrice = theOrder.BillingAmount; 这是确认书 public class Confirmation {

VisualStudio对我大喊大叫,在数据库中它是一个浮点,在我的课堂上它是一个双精度。为什么我不能分配它,为什么它认为它是“双精度”

下面第三行

    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