从另一种方法中访问方法列表

时间:2016-01-10 14:07:02

标签: c# list

我想在方法(菜单选择)中访问列表(在我的程序中名为" section")。我试过三种方法:

has_and_belongs_to_many :movies, after_add: :increment_movie_added_count

def increment_movie_added_count(movie)
  movie.increment(:added_count)
end

感谢您的时间!

4 个答案:

答案 0 :(得分:1)

您无法访问其外部函数的本地范围内的成员。您可能想要考虑将其作为类中的私有实例变量,然后您可以从声明属于此类的任何方法访问,这些都是这样的:

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 
    }
}

答案 1 :(得分:0)

嗯,你可以使它成为类级变量(就像在你的第一次尝试中)并使其静态。

但是,您应该使用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;

        }

答案 2 :(得分:0)

你可以,如果你要实现这样的东西:

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();获得您尝试实现的内容,因此我在示例中删除了它。

答案 3 :(得分:0)

我无法使用你的任何答案,所以我按照自己的方式做到了这一点(肯定比你的更糟糕)

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();




    }





}
}