【问题标题】:How to show the items on a list using foreach outside the method where the list is in (C#)如何在列表所在的方法之外使用 foreach 显示列表中的项目(C#)
【发布时间】:2018-03-09 19:37:35
【问题描述】:

所以,我在 C# 中创建了一个程序,它将读取用户提供的收入和输出,并将它们存储在 2 个列表中。当请求时,程序必须显示存储在列表中的值。问题是,列表位于一个方法中,而用于显示值的 foreach 在另一个方法中,每次我尝试调用列表的名称时,编译器都会对我说:“名称不存在在当前情况下”。欢迎任何帮助。

这是创建列表的方法:

public void ListIncome()
{
    Console.Clear();
    Console.Write("Income: ");
    List<double> Income = new List<double>();
    Income.Add(Convert.ToDouble(Console.ReadLine()));
}

这是显示列表的方法:

public void ShowList()
{
    foreach (double value in Income)
    {
        Console.WriteLine(value);
    }
    Console.ReadKey();
}

【问题讨论】:

  • 您正在 ListIncome() 方法中创建列表,只要该方法将用户输入添加到列表中,它就会立即标记为垃圾收集(意味着它将被销毁)。您的列表应该是一个类成员(理想情况下是一个属性)。这样,all 方法都可以访问它。我建议您学习 C# 课程简介,我认为您可以从基础知识概述中受益。

标签: c# list methods foreach


【解决方案1】:

这是因为您的Income 变量不在ListIncome 方法范围内,所以您需要将其移动到类级别范围以便其他成员方法可以访问。

您需要在列表中创建一个字段,以便在您填充它的方法之外也可以访问它:

public class YourClass
{

   List<double> Income = new List<double>(); // field added

   public void ListIncome()
   {
      Console.Clear();
      Console.Write("Income: ");
      Income.Add(Convert.ToDouble(Console.ReadLine()));
   }

  public void ShowList()
  {
     foreach (double value in Income)
     {
         Console.WriteLine(value);
     }
     Console.ReadKey();
  }

}

现在应该可以在这些方法中访问它,并且您的方法也将在同一个类中,以使这种情况像上面一样工作。

【讨论】:

    【解决方案2】:

    你不能从另一个方法调用封装在一个方法中的变量,因此,你必须在类级别声明它,以便它的所有方法都可以访问该变量

    private List<double> Income = new List<double>();
    
    public void ListIncome()
    {
        Console.Clear();
        Console.Write("Income: ");
        Income.Add(Convert.ToDouble(Console.ReadLine()));
    }
    
    public void ShowList()
    {
        foreach (double value in Income)
        {
            Console.WriteLine(value);
        }
        Console.ReadKey();
    }
    

    这样你就明白了

    A 是一个局部变量。不能从其他方法访问,只能在method()内部访问

    public void method()
    {
       int A = 0;
    }
    

    A现在是类级变量,类的所有方法都可以访问它,因为它是在类中声明的,而不是封装(仅限于方法)在方法内

    public class SomeClass
    {
        int A = 0; 
    
        public method()
        {
            int X = A / 5;  
        }
    }
    

    【讨论】:

    • 我认为,如果您花更多时间解释为什么您的答案解决了 OPs 问题,您的答案会更加有力
    • 还解释了为什么全局变量是类属性或字段的解决方案。
    • 什么是“按类报告”以及它与“它创建全局变量”有何关系?
    • C# 中没有“全局变量”之类的东西。无论如何,“全球”的上下文是什么意思?全球肯定意味着“整个计划”,或者?由于您回答的是 C# 初学者,因此您应该注意您使用的命名法以及它是否有助于理解或引发误解/困惑......
    • 那不是“全局变量”,那是私有类字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多