C# 可为空<;int>;输入错误

C# 可为空<;int>;输入错误,c#,nullable,C#,Nullable,我明白了 可为null的对象必须有一个值 此行中的错误: results.Test= installment.Test1.Value; 我的“测试”属性如下所示: [DataMember] public int Test{ get; set; } 在LINQ2SQL设计器中,我的“Test1”属性如下所示: public System.Nullable<int> Test1 { get { return t

我明白了

可为null的对象必须有一个值

此行中的错误:

   results.Test= installment.Test1.Value;
我的“测试”属性如下所示:

 [DataMember]
 public int Test{ get; set; }
在LINQ2SQL设计器中,我的“Test1”属性如下所示:

public System.Nullable<int> Test1
    {
        get
        {
            return this._Test1;
        }
        set
        {
            if ((this._test1!= value))
            {
                this.OnTest1Changing(value);
                this.SendPropertyChanging();
                this._Test1= value;
                this.SendPropertyChanged("Test1");
                this.OnTest1Changed();
            }
        }
    }
公共系统。可为空的Test1
{
得到
{
返回此文件。\u Test1;
}
设置
{
if((此._test1!=值))
{
此.ontest1更改(值);
此参数为.SendPropertyChanging();
该值为.\u Test1=值;
此。SendPropertyChanged(“Test1”);
此.ontest1已更改();
}
}
}

我做错了什么?

instance.Test1.Value
假设
instance.Test1
实际上有一个值。但是,您得到的错误意味着它不存在,并且该属性实际上是
null
。这是意外的吗?

分期付款的
Test1.Value
null
,您尝试将其分配给不可为null的
integer
类型属性
Test
看起来像
分期付款。Test1.Value
为null,无法分配给
int

试一试


Test1.Value
将在
Test1.HasValue
返回false时抛出。

您的
Test1
属性(仍然)
null
。基础字段
\u Test1
将默认为
null

你可以用

results.Test = installment.Test1 ?? 0;

如果
0
是可接受的默认值

尝试改用此选项:

results.Test = installment.Test1.GetValueOrDefault(-1); //set default value 
试试这个

if(installation.Test1.HasValue)
results.Test=installation.Test1.Value

如果要使用value属性,它需要有一个不为null的值。您可以使用HasValue属性检查属性是否有值

var test = (Test1.HasValue) ? (int?)Test1.Value : null;
可以直接使用变量,而不使用Value属性

var testing = Test1;

那么,
Test1
是否实际分配了一个值?@Henk Holterman:您选择不使用GetValueOrDefault()进行此操作是有原因的吗?@James:每个开发人员都是不同的。我们都知道。@James:不具体。我们知道类型(int),所以不需要抽象的方法来获取默认值。和-1也可以是候选人。@Henk Holterman:谢谢。我只是好奇。我不知道使用其中一个是否有好处。我认为这不可行,因为
results.Test
不接受空值。实际上,我认为这对可为空的类型也不起作用。我认为您需要这样做:(int?)null;如果results.Test无法接受空值,则需要将空值更改为0并删除“(int?)。这完全取决于结果。测试接受。如果results.Test接受null,则需要使用“(int?),因为需要将int设置为null。
var testing = Test1;