在 C# 中使用 List 作为参数创建 class 的实例

Creating instance of a class with List as a parameter in C#

您好,我正在尝试使用 3 classes-Bank、Account、Mainprogram 创建一个银行应用程序。在我的主程序中,我有一个选项供用户添加新的银行帐户。在我的银行 class 我有我的属性、构造函数和添加帐户方法。

class Bank
{
    // Attributes

    private List<int> accounts { get; set; }
    private int number_of_accounts { get; set; }

    //Constructor
    public Bank(List<int> accounts, int number_of_accounts)
    {
        this.accounts= accounts;
        this.number_of_accounts = number_of_accounts;
    }
        public void AddNewAccount(int accountNumber)
    {
        accounts.Add(accountNumber);
        Console.WriteLine("Account with number " + accountNumber+ "has been added!");
    }

在我的 Main 中,我有一个菜单,用户可以在其中选择 1.Add 我调用方法的帐户。

public static bool MainMenu()
        {
            Bank myBank = new Bank(accounts, 0); <----- Error here,

            switch ()
            {
                case "1":
                    // Function
                    Console.WriteLine("Write the account number desired:");
                    int userInput= Convert.ToInt32(Console.ReadLine());
                    myBank.AddNewAccount(userInput);
                    return true;
                case "2":
                    // Function

我的 MainMenu 中的第 3 行显示“名称 'accounts' 在当前上下文中不存在”。

问题是“accounts”不存在,您还没有创建任何名为 accounts 的变量。要解决此问题,请执行以下操作:

var accounts = new List<int>(); 
Bank myBank = new Bank(accounts, 0);

Bank myBank = new Bank(new List<int>(), 0);

您可以只在 class 中使用默认构造函数,如下所示:

class Bank
{
    public Bank()
    {
        this.accounts = new List<int>();
        this.number_of_accounts = 0;
    }
    ... rest of code (from your original question)
}

此外,银行class不应该将帐户数量作为参数。您已经在传递帐户列表(或帐户 ID)。最好使用帐户列表来获取帐户数量,如下所示:

private int number_of_accounts 
{ 
   get 
   {
      return accounts.Count;
   }
}

你必须注意一些事情:

通常 private 用于字段,而不用于属性。您可以完全控制您的私有字段,因此通常您不会定义为私有属性。

private readonly List<int> accounts;
private int number_of_accounts;

此外,number_of_accounts 是多余的。是 accounts.Count。所以最好使用accounts.Count,避免修改账号时忘记更新number_of_accounts的问题。

number_of_accounts 必须是 public(还有一个 属性 而不是一个字段,因为是 public)并且只有 get(没有 set 因为您不能直接更改大小,您可以插入或删除值)。

public int number_of_accounts => accounts.Count;

您不需要带有帐户列表的构造函数。只需创建列表。稍后,使用 AddNewAccount 等方法添加元素。

public Bank()
{
    this.accounts= new List<int>();
}

如果需要,您可以拥有一个带有初始值列表的构造函数。但要避免使用该列表,因为在外部,您的代码可以修改该列表,最好让您的 class 完全控制其字段。

public Bank(List<int> accounts)
{
    this.accounts= new List<int>();
    this.accounts.AddRange(accounts);
}