未赋值局部变量delivered报错及获取存储过程返回值的方案咨询
解决"Using a local variable 'delivered' that is not assigned a value"错误
问题原因
编译器抛出该错误的核心原因是:它无法保证delivered变量一定会被赋值。你仅在第二个foreach (var items in count)循环内给delivered赋值,但如果count集合为空,这个循环根本不会执行,delivered会始终处于未初始化状态,后续给cmd2传参时自然触发错误。
解决方案
1. 给delivered设置初始默认值
声明变量时直接赋予符合业务逻辑的默认值,确保无论count是否为空,变量都有合法值:
// 示例:默认设为当天,也可根据业务需求设为默认配送天数 DateTime delivered = today; // 或者:DateTime delivered = today.AddDays(6);
2. 修复foreach循环的参数重复问题(额外优化)
你的第二个foreach循环中,每次都会给cmd1添加新的@ProductArticleNumber参数,多次循环后会导致参数重复,引发存储过程调用异常。需在每次循环前清空参数:
foreach (var items in count) { cmd1.Parameters.Clear(); // 清空之前的参数集合 cmd1.Parameters.AddWithValue("@ProductArticleNumber", items.ProductArticleNumber); int countArticles = (int)cmd1.ExecuteScalar(); if (countArticles > 3) { delivered = today.AddDays(3); } else { delivered = today.AddDays(6); } }
补充说明
如果业务逻辑要求count不能为空才能执行后续操作,可以在执行foreach前先判断count.Any(),但即使添加了该判断,给变量设置初始值依然是更稳妥的做法,能彻底规避编译器的静态检查报错。
内容的提问来源于stack exchange,提问作者xflx
相关产品推荐
相关产品推荐

