webForumDet fria alternativet

C# fråga

.NETur .NET

6 svar · 485 visningar · startad av Jymdis

JymdisMedlem sedan mars 20016 260 inlägg
#1

Hej!

Går en kurs i C# och enligt instruktionerna ska vi göra ett menysystem i consolen, med switch sats och sen ska all kod ligga i metoder.

Jag försöker det:

case "1":
							Sok();
break;

och sen:

public static string Sok()
		{
			string soktitel; 
			Console.Write("Ange söktitel: ");
			soktitel = Console.ReadLine();

			foreach (Media s in media)
			{
				if (s.titel == soktitel)
				{
					Console.WriteLine(s);
				}
			}

			return "";
		}

Och visst det går, men när jag kommer till "Media s in media" så får jag att media inte existerar (det gör det, har deklarerat den precis ovanför switch satsen):

ArrayList media = new ArrayList();

Den enkla frågan, var består mitt tankefel i?

PhorpherMedlem sedan feb. 20002 300 inlägg
#2

Är media en klassvariabel eller en lokal variabel för funktionen där du har din switchsats? Om det senare så kan du inte komma åt media från sok()-funktionen. Deklarera den som en klassvariabel eller skicka med den som argument till sok().

JymdisMedlem sedan mars 20016 260 inlägg
#3

Hur vet jag om det är en klassvariabel eller lokalvaribel?
Se kod:

static void Main(string[] args)
		{
			//
			// TODO: Add code to start application here
			//
			ArrayList media = new ArrayList();

			while (true)
			{
				string val = Meny();

				switch (val)
				{
					case "1":
						//Sökfunktion ska till 
						Sok();
						break;
					case "2":
						Film p = new Film();
						
						media.Add(p);
						break;
					case "3":
						//Console.Write("Vilken titel vill du ta bort (ange ID): "); 
						//nummer = int.Parse(Console.ReadLine());
						//media.Remove(nummer);
						
						break;
					case "4":
						Album o = new Album();
						media.Add(o);
						break;
					case "5":
						break;
					case "9":
						Environment.Exit(0);
						break;
					default:
						Console.WriteLine("Ej giltig inmatning");
						break;
				}
			}
		}
PhorpherMedlem sedan feb. 20002 300 inlägg
#4

media är i det här fallet en lokal variabel.

Varför? Den är deklarerad i din funktion Main.

Hade det varit en klassvariabel hade den varit deklarerad som t.ex:

public class klassen
{
    [B]private ArrayList media;[/B]

    public static void Main(string[] args)
    {
        ...
    }
}
PhorpherMedlem sedan feb. 20002 300 inlägg
#5

Dubbelpost... :OO

ViktorMedlem sedan aug. 20021 752 inlägg
#6

Tråd flyttad från "C++"

/Viktor

JymdisMedlem sedan mars 20016 260 inlägg
#7

Uppföljningsfråga som har med TypeCast att göra.
Det är samma arraylist, hur får jag ut inmatade värden i arraylisten som är av ett visst objekt?
Jag får felmeddelande "Specified cast is not valid" så jag antar det beror på det.

För att förtydliga:

foreach (Film s in media)

Ger mig det felmeddelandet om det inte är ett Film objekt den kollar av.

133 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)