出现“The name 'n' does not exist in the current context”错误如何跨上下文引用变量
问题解决指南
报错根因
该编译错误由变量作用域限制和using语法的生命周期特性导致:
你声明的DataTable类型变量dt在using块的花括号内部定义,using语法会在代码执行离开块范围后自动销毁释放内部声明的可释放对象,因此你将int n = dt.Rows.Count写在using块外部时,dt已经被销毁不存在,自然无法访问。另外你当前提供的代码片段还存在try块、using块、foreach块花括号未成对闭合的语法问题,也可能触发范围类编译错误。
实现方案
需求完全可以实现,只需要将行数统计逻辑移动到using块内部,提前将值存入上层作用域的变量即可,修改后的代码结构参考:
int n = 0; try { using (DataTable dt = new("aTableName")) { // 原有SQL相关逻辑 foreach (DataRow dr in ds.Tables[0].Rows) { Collection.Add(new 类名 { // 原有属性赋值逻辑 }); } // 在using块内部dt未释放时完成行数统计 n = dt.Rows.Count; } // 此处及后续所有逻辑(包括你要写的foreach遍历逻辑)都可以正常引用n变量 foreach (var item in Collection) { // 可正常使用n变量 Console.WriteLine($"总行数为{n},当前元素为{item}"); } } catch (Exception e) { // 异常处理逻辑 }
优化提示
如果你要统计的行数和你填充的Collection集合元素数一致,可以直接在后续逻辑中调用Collection.Count获取数量,无需额外声明n变量存储,减少冗余代码。
内容的提问来源于stack exchange,提问作者Sandra
相关产品推荐
相关产品推荐

