为了账号安全,请及时绑定邮箱和手机立即绑定

VoteCount =votes; //这里报错不知道为什么?

VoteCount =votes; //这里报错不知道为什么?

德玛西亚99 2023-01-04 21:16:44

错误 1 无法将类型“int?”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)

if (!Page.IsPostBack)
{
DataClassesDataContext db = new DataClassesDataContext();
var votes = (from v in db.VoteItem where v.TitleID == Int32.Parse(Request.QueryString["titleid"].ToString()) select v.ItemCount).Sum();

VoteCount =votes; //这里报错不知道为什么?
}

查看完整描述

2 回答

?
婷婷同学_

TA贡献1612条经验 获得超8个赞

var votes = (from v in db.VoteItem where v.TitleID == (Int32)Parse(Request.QueryString["titleid"].ToString()) select v.ItemCount).Sum();

查看完整回答
反对 回复 2023-01-06
?
哔哔one

TA贡献1611条经验 获得超1个赞

VAR 是.net framework 3.5新出的一个定义变量的类型
其实也就是弱化类型的定义。
VAR可代替任何类型
编译器会根据上下文来判断你到底是想用什么类型的

你使用的 linq的Sum(),最终返回的类型为 int?
所以 var votes ,votes的类型就为int?

值类型后面加问号表示可为空null(Nullable 结构)
Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术。

即 votes 可以为空,
一般来说,你的变量VoteCount 声明的类型应该为int
一个可以为空,一个不能为空,自然不能互相转换

解决有2
int? VoteCount = votes;//将接受参数设为可空int
VoteCount = votes.Vaule;//将votes的值赋值给VoteCount,但votes为空,运行时便会出错

最佳解决方式
VoteCount = -1;//或者0代表默认值
if(votes != null){//判空避免报错
VoteCount = votes.Vaule;
}

查看完整回答
反对 回复 2023-01-06
  • 2 回答
  • 0 关注
  • 14 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信