如何从C#中的循环外部访问循环内部的变量?

如何从C#中的循环外部访问循环内部的变量?,c#,loops,variables,if-statement,C#,Loops,Variables,If Statement,我曾尝试将变量放入循环内部和循环外部,以便其他函数可以使用该变量,但仍然会出错。我使用菜单1创建一个列表。然后我想能够菜单4打印列表和平均值。我要在菜单1上做这一切,只是为了看看它是否有效。但我们需要把它分解。1) 列表和4)显示 bool exit = false; do { Console.WriteLine(""); Console.WriteLine("1. Create age list");

我曾尝试将变量放入循环内部和循环外部,以便其他函数可以使用该变量,但仍然会出错。我使用菜单1创建一个列表。然后我想能够菜单4打印列表和平均值。我要在菜单1上做这一切,只是为了看看它是否有效。但我们需要把它分解。1) 列表和4)显示

bool exit = false;

        do
        {
            Console.WriteLine("");
            Console.WriteLine("1. Create age list");
            Console.WriteLine("2. Add age to list");
            Console.WriteLine("3. Remove age from list");
            Console.WriteLine("4. Display ages and average");
            Console.WriteLine("5. exit");
            Console.WriteLine("");
            string input = Console.ReadLine();
            Console.WriteLine("");

            List<int> ages = new List<int>();
            int totalAges = 0;
            int age;

            if (input == "1")
            {

                //List<int> ages = new List<int>();
                //int totalAges = 0;

                //User Input
                Console.WriteLine("How many ages do you want to enter? ");
                Console.WriteLine("");

                //While loop for TryParse
                while (!int.TryParse(Console.ReadLine(), out totalAges))
                {
                    Console.WriteLine("Please enter a valid number");
                    Console.WriteLine("");
                }
                while (ages.Count != totalAges)
                {
                    // Read grade
                    System.Console.WriteLine("Enter Grade: ");
                    //int age;

                    while (!int.TryParse(System.Console.ReadLine(), out age))
                    {
                        System.Console.WriteLine("Please enter a valid age.");
                    }

                    ages.Add(age);
                }

                for (int index = 0; index < ages.Count(); index++)
                {
                    Console.WriteLine("");
                    Console.WriteLine($"Age { ages[index] }");
                    Console.WriteLine("");
                    totalAges = ages.Sum();
                }

                double avg = 0.0;
                avg = totalAges / (ages.Count);
                Console.WriteLine("");
                Console.WriteLine($"The average age was { avg}");


            }
            else if (input == "2")
            {
                exit = true;
            }
            else if (input == "3")
            {
                exit = true;
            }
            else if (input == "4")
            {

                for (int index = 0; index < ages.Count(); index++)
                {
                    Console.WriteLine("");
                    Console.WriteLine($"Age { ages[index] }");
                    Console.WriteLine("");
                    totalAges = ages.Sum();
                }

                double avg = 0.0;
                avg = totalAges / (ages.Count);
                Console.WriteLine("");
                Console.WriteLine($"The average age was { avg}");
            }
            else if (input == "5")
            {
                exit = true;
            }

            else
            {
                Console.WriteLine("How hard is it to type 1 or 2? Try again!");
            }
        } while (exit == false);
bool exit=false;
做
{
控制台。写线(“”);
Console.WriteLine(“1.创建年龄列表”);
Console.WriteLine(“2.将年龄添加到列表中”);
Console.WriteLine(“3.从列表中删除年龄”);
Console.WriteLine(“4.显示年龄和平均值”);
控制台写入线(“5.退出”);
控制台。写线(“”);
字符串输入=Console.ReadLine();
控制台。写线(“”);
列表年龄=新列表();
整数总计=0;
智力年龄;
如果(输入=“1”)
{
//列表年龄=新列表();
//整数总计=0;
//用户输入
Console.WriteLine(“您想输入多少年龄?”);
控制台。写线(“”);
//TryParse的While循环
而(!int.TryParse(Console.ReadLine(),out totalAges))
{
Console.WriteLine(“请输入有效数字”);
控制台。写线(“”);
}
while(ages.Count!=totalAges)
{
//阅读成绩
System.Console.WriteLine(“输入等级:”);
//智力年龄;
而(!int.TryParse(System.Console.ReadLine(),过期))
{
System.Console.WriteLine(“请输入有效年龄”);
}
年龄。添加(年龄);
}
对于(int index=0;index
我认为在这种情况下,最好不要在方法中声明您试图访问的变量,而应该在类中声明。如果希望每次调用该方法时都将其重置,那么每次都可以在该方法中实例化它。我还要做的是将if语句分解成它们自己的方法。这将使您拥有一个更加面向对象的结构化代码。

一旦我将变量移到循环之外,您可以创建一个新的变量吗?我得到的值为零,这会给我一个除以零的错误。运行1菜单后,我需要变量的值。看起来循环的每次迭代都会重置年龄列表,因此当您将它们添加到opt 1中时,它会重置,并且在opt 4中计数变为0。在进入循环之前,应该声明并初始化年龄,否则会在每个循环中重新创建年龄,从而失去以前的输入。当然,在对ages变量执行任何操作之前,您应该检查是否可以安全地使用它。例如,在条件“4”中,您应该检查(ages.Count==0)。。。错误…还有一个小错误。totalAges=ages.Sum();应在显示单个值的for..循环之外执行。对插入的每个年龄重复相同的不变操作。毫无意义