You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:27:03