C#不能隐式转换类型';int?&x27;至';int';
我有一个疑问:C#不能隐式转换类型';int?&x27;至';int';,c#,int,C#,Int,我有一个疑问: int cid = (from c in dc.Cs where c.id == cid select c.clientid).FirstOrDefault(); return cid; 其中c.clientid可为null。但我收到了这个错误: 无法将类型“int”隐式转换为“int”。存在显式转换(是否缺少强制转换?) 嗯,int?可以是null,而int不能。这就是编译器抱怨的原因:当查询返回null时,
int cid = (from c in dc.Cs
where c.id == cid
select c.clientid).FirstOrDefault();
return cid;
其中c.clientid可为null。但我收到了这个错误:
无法将类型“int”隐式转换为“int”。存在显式转换(是否缺少强制转换?)
嗯,int?
可以是null
,而int
不能。这就是编译器抱怨的原因:当查询返回null
时,它应该将什么分配给cid
。如果null
,您可以尝试提供一些默认值:
int cid = ( from c in dc.Cs
where c.id == cid
select c.clientid)
.FirstOrDefault() ?? 0; //TODO: put the right default value instead of 0
return cid;
这意味着在
null
的情况下返回0
(请注意,您有两种可能:1.第一项c.clientid
为null
;2.过滤为空时返回dc.Cs
)和int?.Value
否则如果c.clientid
在第一次匹配中为null
,或者如果没有匹配,您希望cid
的值是什么。FirstOrDefault()值您应该阅读@alxem No,它只是将编译器错误转化为运行时错误,而没有实际解决问题。如果您显然应该使用null
,那么首先为什么要使用int
?@Samir Aguiar:抱歉,但是如果为空,FirstOrDefault()
返回null
,并且,最后是单个默认值。在您的语法中,我们有两个默认值:第一个值为null时,以及IEnumerable
为空时。当默认值为0
时会出现问题,但当默认值为-1
时会出现问题