Hur når man en lista från en annan metod?
Okej, så jag försöker nå min lista som finns i en annan metod, har provat att flytta listan utanför metoden men det verkar inte fungera heller.
using System;
using System.Collections.Generic;
namespace bilhandlaren
{
class Program
{
public static void regBil()
{
List<string> nyBil = new List<string>();
string input = "";
while (input.ToLower() != "klar")
{
Console.WriteLine("Spara så många objekt du vill, skriv klar när du är färdig.");
input = Console.ReadLine();
nyBil.Add(input);
}
}
public static void regKund()
{
List<string> nyKund = new List<string>();
string input = "";
while (input.ToLower() != "klar")
{
Console.WriteLine("Spara så många kunder du vill, skriv klar när du är färdig.");
input = Console.ReadLine();
nyKund.Add(input);
}
}
public static void bilLista()
{
//for (int i = 0; i < nyBil.Count; i++) ;
}
public static void kundLista()
{
}
static void Main(string[] args)
{
bool minBool = true;
while (minBool == true)
{
Console.WriteLine("Välkommen, hur vill du gå vidare?" +
"\n 1. Registrera en ny bil" +
"\n 2. Registrera en ny kund" +
"\n 3. Visa alla registrerade bilar" +
"\n 4. Visa alla registrerade kunder" +
"\n 5. Avsluta");
int menyval = int.Parse(Console.ReadLine());
switch (menyval)
{
case 1:
regBil();
break;
case 2:
regKund();
break;
case 3:
/*foreach (string i in nyBil) //hur ska den nå listan?
{
}
for (int i = 0; i < nyBil.Count; i++) //hur ska den nå listan?
Console.WriteLine("Lista över alla bilar:" + nyBil[i]);
*/
break;
case 4:
//kalla på kundlistan
break;
case 5:
minBool = false;
break;
default:
Console.WriteLine("Vänligen ange en siffra mellan 1-5.");
break;
}
}
}
}
}
Kan du indentera koden korrekt? Använd kodverktyget som ser ut som {;}.
.
Om du lägger nyBil direkt under class Program borde det fungera.
(Men du ska inte deklarera den på nytt i regBil i så fall.)
Det var det jag försökte göra men då går det ej att lägga till en bil,
namespace bilhandlaren
{
class Program
{
List<string> nyBil = new List<string>();
public static void regBil()
{
string input = "";
while (input.ToLower() != "klar")
{
Console.WriteLine("Spara så många objekt du vill, skriv klar när du är färdig.");
input = Console.ReadLine();
nyBil.Add(input); ((((((här uppstår röd linje under nyBil))))))
}
}
Om metoden (regBil) är static så måste attributet (nyBil) också vara det.
Kan du peka med musen på det röda och få nåt felmeddelande? Den borde säga nåt i den stilen.
Tillägg: 25 apr 2022 16:42
Löste det genom att flytta listan under program och snge static innan listan, tack snälla för hjälpen 😊
Ett annat alternativ är att skapa listan i Main, sedan skicka in listan till metoderna
static void Main(string[] args)
{
bool minBool = true;
List<string> nyBil = new List<string>();
List<string> nyKund = new List<string>();
do
{
Console.WriteLine("Välkommen, hur vill du gå vidare?" +
"\n 1. Registrera en ny bil" +
"\n 2. Registrera en ny kund" +
"\n 3. Visa alla registrerade bilar" +
"\n 4. Visa alla registrerade kunder" +
"\n 5. Avsluta");
int menyval = int.Parse(Console.ReadLine());
switch (menyval)
{
case 1:
regBil(ref nyBil);
break;
case 2:
regKund(ref nyKund);
break;
//...
default:
Console.WriteLine("Vänligen ange en siffra mellan 1-5.");
break;
}
}
while (minBool == true);
}
Sedan gör du om dina regBil/regKund så här
public static void regBil(ref List<string> nyBil)
{
string input = "";
do
{
Console.WriteLine("Spara så många objekt du vill, skriv klar när du är färdig.");
input = Console.ReadLine();
if (input.ToLower() != "klar") // om du inte vill ha en sista bil "klar"
{
nyBil.Add(input);
}
}
while (input.ToLower() != "klar");
}
Ska definitivt prova det imorgon! Tack snälla för hjälpen