#c# #object #input
#c# #объект #ввод
Вопрос:
В настоящее время я изучаю c # и пытаюсь создать скрипт, который создаст банковский счет, а затем найдет его обратно и добавит на него деньги.
Этот метод используется для создания новой учетной записи :
static void CreateNewAccount()
{
Console.WriteLine("Enter a name for a new account.");
string bname = Console.ReadLine();
Console.WriteLine("Creating a new account for : {0}", bname);
List<BankAccount> account = new List<BankAccount>() // not sure about it
{
new BankAccount { name = bname } // creating a new account
};
Console.WriteLine(account.Exists(x => x.name == bname));
var useraccount = account.Find(x => x.name == bname); // Trying to find the account that i've created earlier
useraccount.Deposit(100); // trying to add money on it
useraccount.CheckBalance();
Console.WriteLine("test");
}
И вот мой класс :
class BankAccount
{
private double _balance=0;
public string name;
public BankAccount()
{
Console.WriteLine("You succesfuly created a new account.");
}
public double CheckBalance()
{
return _balance;
}
public void Deposit(double n)
{
_balance = n;
}
public void WithDraw(double n)
{
_balance -= n;
}
}
Я совсем не уверен в том, как использовать List и как использовать Find. Я написал это, потому что я нашел его в похожем скрипте.
Знаете ли вы простой способ сделать это ? Я новичок.
Спасибо
Комментарии:
1. Объект добавлен в список, ребята!! Этот код корректен с точки зрения синтаксиса, но что вы хотите сделать и что с ним не так?
2. Для этого вам не нужен список, так зачем вы используете список? Все, что вам нужно сделать, это создать один объект класса банковский счет. Вы можете использовать цикл for вместо списка, если вы делаете это для многих банковских счетов. Что вообще делает ваше приложение? Зачем ему нужно использовать списки?
3. Вам нужен банк классов, который содержит список<BankAccount>() . Или добавьте в класс BankAccount общедоступный статический список<BankAccount> accounts = новый список<BankAccount>();
4. @jdweng хорошо, я собираюсь попробовать это решение, можете ли вы объяснить мне, как я могу создать этот список внутри класса Bank и как получить к нему доступ, пожалуйста?
Ответ №1:
Вы можете использовать LINQ для поиска определенного объекта в списке.
var query = account.Where(a => a.name == "A NAME" );
Затем, чтобы использовать это
foreach(var account in query.ToList())
{
//do work
}
Ответ №2:
Попробуйте выполнить следующее :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
static void CreateNewAccount()
{
Bank bank = new Bank();
Console.WriteLine("Enter a name for a new account.");
string bname = Console.ReadLine();
Console.WriteLine("Creating a new account for : {0}", bname);
BankAccount account = new BankAccount(bname, 0);
Console.WriteLine(bank.GetAccounts().Exists(x => x.name == bname));
var useraccount = bank.GetAccount(bname); // Trying to find the account that i've created earlier
useraccount.Deposit(100); // trying to add money on it
useraccount.CheckBalance();
Console.WriteLine("test");
}
}
class Bank
{
private List<BankAccount> accounts = new List<BankAccount>();
public List<BankAccount> GetAccounts()
{
return accounts;
}
public BankAccount GetAccount(string name)
{
return accounts.Where(x => x.name == name).FirstOrDefault();
}
}
class BankAccount
{
private double _balance = 0;
public string name;
public BankAccount(string name, double balance)
{
this.name = name;
this._balance = balance;
Console.WriteLine("You succesfuly created a new account.");
}
public double CheckBalance()
{
return _balance;
}
public void Deposit(double n)
{
_balance = n;
}
public void WithDraw(double n)
{
_balance -= n;
}
}
}
Комментарии:
1. Спасибо! Это похоже на то, что я сейчас пытался сделать! Я взял ваш код, но у меня есть исключение System.NullReferenceException в строке 26 (строка useraccount. Депозит (100);), я постараюсь это исправить. Еще раз спасибо.
2. Get account может возвращать значение null, если учетная запись не существует. Поэтому вы должны проверить наличие null перед выполнением строки 26. Вы не можете внести деньги на счет, который не существует.
3. Если я создам учетную запись с именем john (bname = john), а затем я ищу консоль учетной записи с именем john (bname = john). Строка записи (банк. GetAccounts().Exists(x => x.name == bname)); Он возвращает false.
4. Да, но вы получаете исключение двумя строками позже. значение useraccount равно нулю, поэтому вы не можете внести деньги. Реальная проблема в том, что вам не хватает следующего: bank.accounts. Добавить (учетную запись);