从另一个方法中的方法访问列表

本文关键字:方法 访问 列表 另一个 | 更新日期: 2023-09-27 18:29:37

我想访问一个方法(菜单选择)内的列表(在我的程序"section"中)。我尝试了3种方法:

public static void dataBase()
        {
                List<float> section = new List<float>();
        }

// 1st try
//  List<float> section = new List<float>();
//
        public static void mainMenu()
        {
            Console.Clear();
            Console.WriteLine("Trans->Connector->'n");
            Console.WriteLine("Add: 'n1. Section 'n2. Wled 'n3. Regenerator");
            menuChoose();
        }
        public static void menuChoose()
        {
            var key = Console.ReadKey();
            switch (key.Key)
            {
                case ConsoleKey.D1:
                case ConsoleKey.NumPad1:
                    Console.Clear();
                    Console.WriteLine("Give lenght:");
                    float result;
                    float.TryParse(Console.ReadLine(), out result);
                    dataBase.section.Add();
                    section.Add(result);
                    break;
                case ConsoleKey.D2:
                    Console.WriteLine("2");
                    break;
                case ConsoleKey.D3:
                    Console.WriteLine("3");
                    break;
                default:
                    Console.WriteLine("default");
                    break;
            }
        }
        static void Main(string[] args)
        {
            int WeldCount;
            int ConnectroCount;
//3rd try
// List<float> section = new List<float>();
//
            mainMenu();
        }

感谢您抽出时间!

从另一个方法中的方法访问列表

您不能在函数的本地作用域中访问它之外的成员。您可能需要考虑将其作为类内的私有实例变量,然后您可以从声明的属于该类的任何方法访问该变量,大致如下:

public class MyClass
{
    // this field is accessible from any method declared within this class
    private List<Float> section;
    public MyClass()
    {
        section = new List<Float>();
    }
    private void someMethod()
    {
        section.Add(2.2);    
        Console.WriteLine(section[0]); // example 
    }
}

好吧,你可以让它成为类级变量(就像你第一次尝试的那样),并让它成为静态的。

但是,您应该使用menuChoose()方法的返回值。让所有代码都依赖于单个静态列表实例是不理想的。

public static List<float> menuChoose()
        {
            List<float> selection = new List<float>();
            var key = Console.ReadKey();
            switch (key.Key)
            {
                case ConsoleKey.D1:
                case ConsoleKey.NumPad1:
                    Console.Clear();
                    Console.WriteLine("Give lenght:");
                    float result;
                    float.TryParse(Console.ReadLine(), out result);
                    selection.Add(result);
                    break;
                case ConsoleKey.D2:
                    Console.WriteLine("2");
                    break;
                case ConsoleKey.D3:
                    Console.WriteLine("3");
                    break;
                default:
                    Console.WriteLine("default");
                    break;
            }
          return selection;
        }

如果你想实现这样的东西,你可以使用它:

public static class DataBase
{
    public static List<float> Section { get; set; }
    static DataBase()
    {
        Section = new List<float>();
    }
}

这里介绍如何使用,例如在您的switch语句中:

    case ConsoleKey.NumPad1:
         Console.Clear();
         Console.WriteLine("Give lenght:");
         float result;
         float.TryParse(Console.ReadLine(), out result);
         DataBase.Section.Add(result);
      break;

我没有得到你试图通过dataBase.section.Add();实现的结果,所以我在我的例子中删除了它。

我不能使用你的任何答案,所以我用我的方式做了这件事(当然比你的糟糕得多)

public class Program
{
    public int WeldCount;
    public int ConnectroCount;
    public List<float> section = new List<float>();
    //public List<> TrackElements = new List<>();
    public Program()
    {
        section.Add(0);
    }
    public void showResults()
    {
        float allSections = 0;
        foreach (float item in section)
        {
            allSections += item;
        }
        Console.Clear();
        Console.WriteLine("c1 {0}, c2 {1}, c3{2}", WeldCount,ConnectroCount,allSections);
        Console.ReadKey();
    }

    public void finalConstruction()
    {


    }

    public static void mainMenu()
    {
        Console.Clear();
        Console.WriteLine("'n");
        Console.WriteLine("Add: 'n1. Section 'n2. Weld 'n3. Regenerator'n4. Show results");


    }

    public void menuChoose()
    {
        var key = Console.ReadKey();
        switch (key.Key)
        {
            case ConsoleKey.D1:
            case ConsoleKey.NumPad1:
                Console.Clear();
                Console.WriteLine("Give lenght:");
                float result;
                float.TryParse(Console.ReadLine(), out result);

                section.Add(result);

                mainMenu();
                menuChoose();
                break;
            case ConsoleKey.D2:
                WeldCount++;
                mainMenu();
                menuChoose();
                break;
            case ConsoleKey.D3:
                ConnectroCount++;
                mainMenu();
                menuChoose();
                break;
            case ConsoleKey.D4:
                showResults();
                mainMenu();
                menuChoose();
                break;


            default:
                Console.WriteLine("wtf did just happend");
                break;
        }
    }

    static void Main(string[] args)
    {

        Program program = new Program();
        mainMenu();
        program.menuChoose();


    }


}
}