C#如何将不同方法中定义的Nom、Cm变量值传入Main方法调用
C#跨方法调用变量报错解决方案
错误原因
你的报错是由C#局部变量作用域规则导致的:在方法内部定义的变量属于局部变量,仅在当前方法的执行生命周期内有效,方法执行完毕后变量就会被销毁,其他方法无法直接访问。你在YourName、Height方法里定义的Nom、Cm都是仅属于对应方法的局部变量,Main方法自然无法读取。
推荐解决方案:修改方法为带返回值形式
将需要对外暴露的结果作为方法返回值,在Main方法中调用时直接接收返回值即可,这是C#方法间传递单值的最优实现:
using System; namespace Main { class Program { static void Main(string[] args) { // 调用方法并接收返回的结果 string Nom = YourName(); double Cm = Height(); Console.WriteLine($"Well {Nom}, you are {Cm:F1}cm tall "); Console.ReadLine(); } // 方法返回值类型修改为string,返回用户输入的姓名 private static string YourName() { Console.Write("What is your name? "); string Nom = Console.ReadLine(); if (string.IsNullOrEmpty(Nom)) { Console.Write("Be that way. "); } else { Console.Write("That's a great name! "); } // 返回姓名给调用方 return Nom; } // 方法返回值类型修改为double,返回转换后的厘米数 private static double Height() { Console.Write("How tall are you in inches?: "); double Inch = Convert.ToDouble(Console.ReadLine()); double Cm = Inch * 2.54; // 返回厘米数给调用方 return Cm; } } }
可选替代方案(非必要不推荐):使用类级别静态字段
如果需要在多个方法间共享多个变量,也可以将变量定义为类的静态字段,整个类内的所有方法都可以直接读写,但会提高代码耦合度:
using System; namespace Main { class Program { // 定义类级别的静态字段,全类内方法可访问 static string Nom; static double Cm; static void Main(string[] args) { YourName(); Height(); Console.WriteLine($"Well {Nom}, you are {Cm:F1}cm tall "); Console.ReadLine(); } private static void YourName() { Console.Write("What is your name? "); // 直接给静态字段赋值 Nom = Console.ReadLine(); if (string.IsNullOrEmpty(Nom)) { Console.Write("Be that way. "); } else { Console.Write("That's a great name! "); } Console.ReadLine(); } private static void Height() { double Inch; Console.Write("How tall are you in inches?: "); Inch = Convert.ToDouble(Console.ReadLine()); // 直接给静态字段赋值 Cm = Inch * 2.54; } } }
内容的提问来源于stack exchange,提问作者T-T
相关产品推荐
相关产品推荐

