C#报错"player1不存在于当前上下文"的问题咨询
解决C#中“player1不存在于当前上下文”的问题
嘿,刚入门C#遇到这种问题太正常啦,别慌~咱们先把问题根源捋清楚:
你在createPlayer方法里创建的player1是局部变量,它的作用域只限于createPlayer方法内部——简单说就是,出了这个方法的“地盘”,Main方法根本不知道这个变量存在,所以编译器才会报错说找不到它。
下面给你两种实用的解决办法,你可以根据场景选:
方法1:让方法返回Player对象(更推荐)
把createPlayer的返回类型从void改成Player,方法最后返回创建好的对象,然后在Main里接收这个返回值。这种方式逻辑清晰,也符合代码设计的最佳实践:
修改后的主文件代码:
using System; namespace project { class Program { static void Main(string[] args) { // 接收方法返回的Player对象 Player player1 = CreatePlayer(); Console.WriteLine(player1.Name); // 现在就能正常访问啦 Console.ReadKey(); } // 把方法名改成PascalCase(C#的命名规范),返回类型改为Player static public Player CreatePlayer() { Console.WriteLine("\nType in your name :"); Player player1 = new Player(Console.ReadLine()); Console.WriteLine("\n Name: " + player1.Name + "\n Speed: " + player1.Speed + "\n Defence: " + player1.Defence + "\n Damage: " + player1.Damage); Console.WriteLine("\nPress 1 to continue, Press 2 to reroll."); // 返回创建好的Player对象 return player1; } } }
方法2:定义类级别的静态变量
如果不想修改方法的返回值,你可以在Program类里定义一个静态的Player变量,这样整个类的所有方法都能访问它:
修改后的主文件代码:
using System; namespace project { class Program { // 定义类级别的静态变量,整个类范围内都能访问 static Player player1; static void Main(string[] args) { CreatePlayer(); Console.WriteLine(player1.Name); // 现在能正常访问了 Console.ReadKey(); } static public void CreatePlayer() { Console.WriteLine("\nType in your name :"); // 给类的静态变量赋值 player1 = new Player(Console.ReadLine()); Console.WriteLine("\n Name: " + player1.Name + "\n Speed: " + player1.Speed + "\n Defence: " + player1.Defence + "\n Damage: " + player1.Damage); Console.WriteLine("\nPress 1 to continue, Press 2 to reroll."); } } }
新手小提醒(C#命名规范)
顺便给你个小建议:C#里方法名一般用PascalCase(首字母大写,比如CreatePlayer而不是createPlayer),变量名用camelCase(首字母小写,比如player而不是Player),养成规范的命名习惯,后续写代码会更顺手易读哦~
内容的提问来源于stack exchange,提问作者Jaxhi
相关产品推荐
相关产品推荐

