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
时会出现问题