Je crée un petit programme qui prend les entrées de l'utilisateur (chaîne et décimale) et les réimprimera à l'utilisateur quand ils choisissent l'option "View Summary" dans le menu.Comment puis-je enregistrer un objet avec plusieurs types de variables dans une collection à appeler plus tard?
Les menus défilent en fonction des entrées utilisateur et le nom du compte/les soldes de compte s'imprimeront immédiatement après leur demande/entrée, mais je ne peux pas les enregistrer et imprimer lorsque l'option 3 est sélectionnée. Malgré toutes les entrées, le «View Summary» indique que les actifs sont 0 et les dettes sont 0 à chaque fois.
La classe Account a un nom de chaîne et une balance décimale, et je veux seulement qu'elle soit sauvegardée jusqu'à ce que l'utilisateur ait terminé. (. Aucune base de données juste essayer d'obtenir des concepts pour l'instant)
Mes principales questions:
est-ce à cause des boucles/la liste doit être en dehors d'eux pour capturer des données?
un dictionnaire serait-il une meilleure idée, et puis-je commencer avec une collection vide?
static void Main(string[] args)
{
string menuChoice;
string response;
do
{
// Welcome/Menu screen
Console.WriteLine("\nWelcome to your Net Worth Calculator.\n \n MENU:\n 1. Add Asset\n 2. Add Debt\n 3. View Summary");
Console.WriteLine(" ");
Console.WriteLine("What would you like to do?\nPlease make a selection: ");
menuChoice = Console.ReadLine();
Account asset = new Account();
var accountList = new List<Account>();
if (menuChoice == "1")
{
do
{ //D1
Console.WriteLine("\nGreat! Let's add an account.");
Console.WriteLine("Account name:");
asset.name = Console.ReadLine();
Console.WriteLine("Your account name is: " + asset.name);
Console.WriteLine("\nWhat is your current account balance with " + asset.name + "?");
Console.WriteLine("Balance:");
asset.balance = Decimal.Parse(Console.ReadLine());
accountList.Add(asset);
Console.WriteLine("Your balance with " + asset.name + " is currently $" + asset.balance + ".");
Console.WriteLine("\n\nWould you like to add another account? y/n");
response = Console.ReadLine();
} while (response != "n");
}
if (menuChoice == "3")
{
//D3
Console.WriteLine("Let's take a look at the accounts and balances that you've added so far:");
Console.WriteLine($"{asset.balance} is your asset, and {debt.balance} is your debt.");
decimal netWorth = asset.balance - debt.balance;
Console.WriteLine(netWorth);
Console.WriteLine($"{ asset.balance}");
Console.WriteLine("\n\nWould you like to add another account? y/n");
response = Console.ReadLine();
}
La mise en forme WriteLine que vous utilisez est spécifique à C# 6.0. Utilisez-vous cette version? – user2867342
C'est essentiellement ce que vous avez déjà dit, vous créez une nouvelle instance de 'accountList' dans la boucle, donc à chaque fois vous perdez les données de la dernière fois. Déplacez-le en dehors de la boucle. Vous devrez changer le code à l'intérieur de l'instruction 'if' pour le choix 3 afin de faire défiler' accountList' pour additionner les données nécessaires. – Equalsk
Vous pouvez créer un nouvel objet compte à chaque fois autour de la boucle. Actuellement, vous affectez simplement la même instance et vous la réajoutez à la collection. – user2867342