C# 可为空<;int>;输入错误
我明白了 可为null的对象必须有一个值 此行中的错误: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
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;