不能打印arraylist或列表的元素

时间:2017-06-09 19:53:28

标签: c#

当我调用ReadList函数时,它会打印元素,我做错了什么?我甚至尝试使用普通列表。我想要做的是如果我通过CreateAccount函数创建2个帐户,我想通过ReadList打印它们

namespace Bank
{
    class Program
    {        
        static void Main()
        {
            int option;
            do
            {

                Menu1 menu1 = new Menu1();
                Account account = new Account();
                option = menu1.CallMenu1();
                if (option == 1)
                {
                    account.CreateAccount();
                }else if (option == 2) {
                    account.ReadList();
                    break;
                }
                else
                {
                    break;
                }
            } while (true);
        }

    }

    class Account
    {
        int AccountNumber { get; set; }
        string Name { get; set; }
        float Balance { get; set; }



        public void CreateAccount()
        {
            int AccountNumberInput;
            string NameInput;
            float BalanceInput;
            ArrayList list = new ArrayList();

            Console.WriteLine("put id");
            AccountNumberInput = int.Parse(Console.ReadLine());
            Console.WriteLine("type name");
            NameInput =Console.ReadLine();
            Console.WriteLine("type balance");
            BalanceInput = float.Parse(Console.ReadLine());
            list.Add(AccountNumberInput);
            list.Add(NameInput);
            list.Add(BalanceInput);
        }
        public void ReadList()
        {
            ArrayList list = new ArrayList();
            foreach (string c in list)
            {
                Console.WriteLine(c);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您的CreateAccount方法执行此操作:

  • 创建新列表
  • 填充列表
  • 列表中没有任何内容

您的ReadList方法执行此操作:

  • 创建一个新的(空)列表
  • 打印列表内容

CreateAccount()中创建的列表永远不会在方法之外传递 - 您如何期望ReadList()方法了解它?

最简单的更改是让CreateAccount() 返回其创建的列表,然后将ReadList更改为接受 ArrayList作为参数。您需要更改Main方法以将CreateAccount的结果存储在本地变量中,然后在调用时将其传递给ReadList

然而,除此之外:

  • 我会避免在任何新代码中使用ArrayList。许多年前,它被List<T>取代了。
  • 您的CreateAccount方法肯定会按照其说法执行操作:创建帐户。它应该是一个返回Account的静态方法...那么你的ReadList方法可能只是一个没有任何参数的PrintDetails实例方法,因为你可以在 on < / em> CreateAccount返回的实例。
  • 如果有人在创建帐户之前尝试打印帐户,您应该考虑要做什么......

答案 1 :(得分:0)

因为你的班级错了。您正在使用其中一种方法初始化列表。一旦您的方法完成执行,其中的所有内容都将从内存中卸载。

为此,你必须向包含数据的类本身添加一个字段/属性,并且可以被类的所有方法使用

class Account
{
    int AccountNumber { get; set; }
    string Name { get; set; }
    float Balance { get; set; }
    //added this line
    private ArrayList list {get;set;}


    public void CreateAccount()
    {
        int AccountNumberInput;
        string NameInput;
        float BalanceInput;
        //notice this
        list = new ArrayList();

        Console.WriteLine("put id");
        AccountNumberInput = int.Parse(Console.ReadLine());
        Console.WriteLine("type name");
        NameInput =Console.ReadLine();
        Console.WriteLine("type balance");
        BalanceInput = float.Parse(Console.ReadLine());
        list.Add(AccountNumberInput);
        list.Add(NameInput);
        list.Add(BalanceInput);
    }
    public void ReadList()
    {
        //removed ArrayList list = new ArrayList();

        foreach (string c in list)
        {
            Console.WriteLine(c);
        }
    }
}