Как получить доступ к функциям внутри объекта в массиве - PullRequest
1 голос
/ 20 мая 2019

У меня есть класс с именем «Account», созданный со значением (например, «new Account (amt)»).Но как я могу получить эту сумму из объекта класса Account.Я думал, что мог бы использовать "listOfAccounts [0] .balance.ToString ();"но когда я пытаюсь использовать listOfAccounts [0], функции не отображаются как видимые.

    private ArrayList listOfAccounts = new ArrayList();
    double amt = (double.Parse(txtAmount.Text));
    listOfAccounts.Add(new Account(amt));
    lblShowBalance.Text = listOfAccounts[0].balance.ToString();

Мой класс выглядит примерно так:

class Account
{
    private double balance;

    public double Balance { get; set; }

    public Account() { }

    public Account (double balance)
    {
        this.balance = balance;
    }

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

Вы могли разыграть предмет:

 var acct = (Account)listOfAccounts[0];
 acct.balance.ToString();

Но не делай этого!

ArrayList в .Net устарел с тех пор, как .Net 2.0 представил дженерики почти 15 лет назад. Нет никаких оснований для когда-либо использовать его новый код. Вместо этого используйте List<T>, то же самое, но строго типизированный.

Пока я здесь: тоже не совсем нормально использовать тип double для денег. При работе с деньгами вы всегда должны использовать decimal.

Соберите все это так:

public class Account
{
    public decimal Balance {get; set;}

    public Account() { }
    public Account(decimal balance)
    {
        this.Balance = balance;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var listOfAccounts = new List<Account>();
        listOfAccounts.Add(new Account(133.1m));

        Console.WriteLine(listOfAccounts[0].Balance);
        Console.ReadKey(true);
    }
}

И с инициализатором коллекции для удовольствия:

class Program
{
    static void Main(string[] args)
    {
        var listOfAccounts = new List<Account> {new Account(133.1m)};
        Console.WriteLine(listOfAccounts[0].Balance);
        Console.ReadKey(true);
    }
}
1 голос
/ 20 мая 2019

Проблема в ArrayList магазинах объектов. Вы хотите ссылаться на него как Account, а не Object (как в базовом типе объекта, от которого наследуются другие объекты). Есть несколько проблем с кодом, но чтобы ответить на ваш вопрос, вы можете привести этот объект обратно к типу Account:

class Program
{
    static void Main(string[] args)
    {
        ArrayList listOfAccounts = new ArrayList();
        double amt = double.Parse("133.1");
        listOfAccounts.Add(new Account(amt));
        Console.WriteLine(((Account)listOfAccounts[0]).balance.ToString());
        Console.ReadLine();
    }
}

public class Account
{
    public double balance;
    public Account() { }
    public Account(double balance)
    {
        this.balance = balance;
    }
}

В идеале, однако, вы не должны использовать ArrayList вообще: https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist?view=netframework-4.8

Если вы замените вышеприведенное на List<Account>, все станет намного лучше:

    static void Main(string[] args)
    {
        List<Account> listOfAccounts = new List<Account>();
        double amt = double.Parse("133.1");
        listOfAccounts.Add(new Account(amt));
        foreach(Account account in listOfAccounts)
        {
            Console.WriteLine(account.balance.ToString());
        }
        Console.ReadLine();
    }
1 голос
/ 20 мая 2019

Вы можете привести элементы к Account, тогда public member доступны:

private ArrayList listOfAccounts = new ArrayList();
double amt = (double.Parse(txtAmount.Text));
listOfAccounts.Add(new Account(amt));
lblShowBalance.Text = ((Account)listOfAccounts[0]).Balance.ToString();

и ваш класс должен выглядеть так, чтобы получить значение баланса:

class Account
{
  private double balance;

  public double Balance { get { return balance; } }

  public Account() { }

  public Account (double balance)
  {
      this.balance = balance;
  }
}

Для приведения всех элементов к сильно типам смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...