C#终端游戏脚本报CS0103错误:已定义变量b却提示不存在
错误原因
该CS0103错误由C#的变量作用域规则导致:
- 所有被
{}包裹的代码块内部定义的变量,都属于局部变量,仅能在当前代码块内部访问,代码块执行结束后变量就会被销毁。 - 你在
for循环的代码块内部定义了string b,这个变量的生命周期仅限循环内部,循环结束后就已失效,所以在循环外部的if判断中访问b时,编译器会提示该变量不存在。
解决方法
方案1:将变量b的定义提升到for循环外部(适配现有判断逻辑)
如果你的需求是用循环最后一次收到的用户输入做判断,直接把b的定义移到循环外即可:
using System; namespace Csharp_Game { class Program { static void Main(string[] args) { string screen1 = ".-"; string screen2 = ",."; string screen3 = "."; string screen4 = ",-"; string screen5 = ".."; Console.WriteLine(screen1); Console.WriteLine(screen2); // 把b的定义移到for循环外部,作用域覆盖后续判断逻辑 string b = string.Empty; for (int i = 0; i <= 250; i++) { b = Console.ReadLine(); } if (b=="right1") { Console.WriteLine(screen1); Console.WriteLine(screen3); } if (b=="up1") { Console.WriteLine(screen4); Console.WriteLine(screen5); } } } }
方案2:将判断逻辑移到for循环内部(适配实时输入响应需求)
如果你的需求是用户每输入一次就立刻执行对应操作,直接把if判断放到循环内部即可:
using System; namespace Csharp_Game { class Program { static void Main(string[] args) { string screen1 = ".-"; string screen2 = ",."; string screen3 = "."; string screen4 = ",-"; string screen5 = ".."; Console.WriteLine(screen1); Console.WriteLine(screen2); for (int i = 0; i <= 250; i++) { string b = Console.ReadLine(); // 判断逻辑和b处于同一作用域 if (b=="right1") { Console.WriteLine(screen1); Console.WriteLine(screen3); } if (b=="up1") { Console.WriteLine(screen4); Console.WriteLine(screen5); } } } } }
内容的提问来源于stack exchange,提问作者program
相关产品推荐
相关产品推荐

