ASP.NET控制器向视图传数据时遇到CS0266报错如何解决?
错误原因
实体类中的Price字段是可空双精度类型double?,这类字段既可以存储正常的double数值,也可以存储null值,C#不支持可空类型到非空double类型的隐式转换,因此触发CS0266报错。
修复方案
可根据实际业务需求选择以下任意方案:
方案1:设置空值默认值
如果允许Price为空,空值时使用指定默认值(例如0),可调用GetValueOrDefault()方法:
public JsonResult GetItemCode(string Code) { double Category = objFatchXEntities.ItemCardUAE.Single(s => s.Code == Code).Price.GetValueOrDefault(0); return Json(Category, JsonRequestBehavior.AllowGet); }
若不传参数,GetValueOrDefault()会自动返回对应值类型的默认值,double类型的默认值为0。
方案2:强制转换(仅适用Price一定不为空的场景)
如果你可以确认对应数据的Price字段绝对不会为空,可以直接强制转换或者读取可空类型的Value属性:
public JsonResult GetItemCode(string Code) { // 写法1:强制类型转换 double Category = (double)objFatchXEntities.ItemCardUAE.Single(s => s.Code == Code).Price; // 写法2:读取Value属性 // double Category = objFatchXEntities.ItemCardUAE.Single(s => s.Code == Code).Price.Value; return Json(Category, JsonRequestBehavior.AllowGet); }
注意:如果实际运行时
Price为null,这两种写法都会抛出运行时异常,使用前必须确保数据不存在空值。
方案3:保留可空类型
如果业务需要保留null值,直接把接收变量的类型改为double?即可:
public JsonResult GetItemCode(string Code) { double? Category = objFatchXEntities.ItemCardUAE.Single(s => s.Code == Code).Price; return Json(Category, JsonRequestBehavior.AllowGet); }
内容的提问来源于stack exchange,提问作者Ahmed Hamed
相关产品推荐
相关产品推荐

