Frage von NiklasRi, 57

C# einer Variable mehrere Werte zuweisen?

Hey Leute,

Ich hab vor nicht all zu langer zeit mit c# angefangen und möchte deswegen ein bisschen üben. ich arbeite gerade daran eine art Notenmanager zu programmieren und hab die Klassen Hauptfach und Nebenfach. Die Noten sollen dann die einzelnen variablen sein (int schulaufgabe, int stegreifaufgabe ...).

jetzt hat man ja mehrere Schulaufgaben (mehrere Noten) und deswegen möchte ich gerne wissen wie ich das umsetzen kann dass ich z.b. 4 (unterschiedliche) Schulaufgabennoten hinzufügen kann

Danke Schonmal!

Antwort
von Mikkey, 31

Du erstellst eine Klasse "Note", in der auch der Typ der Aufgabe enthalten* ist.

In Deiner "Fach"-Klasse (Basisklasse zu Hauptfach und Nebenfach) definierst du eine Variable "List<Note> noten". In die kannst Du dann die jeweiligen Noten eintragen.

* Alternativ kannst Du natürlich spezialisierte Klassen von Note ableiten.

Antwort
von Palladin007, 19

Du kannst ein Array erstellen:

int[] myArray = new int[123];

Oder eine Liste:

List<int> myList = new List<int>();

Das Array hat eine feste Größe, die nach dem Erstellen nicht mehr geändert werden kann, bei der Liste kannst Du Elemente hinzufügen oder entfernen.

Die Noten und die Aufgabe in solchen Listen zu sammeln ist aber keine gute Idee.

Besser wäre ein Klasse, die z.B. ein Arbeitsergebnis darstellt. Dort hast Du ein Objekt für die Arbeit, eine Klausur, Test, etc. und daneben hast Du noch die Note, die der Schüler bekommen hat.

Von Objekten dieser Klasse kannst Du dann eine Liste pflegen.

Außerdem solltest Du Haupt- und Nebenfach nicht seperat haben. Dafür gibt es die Konzepte der Objektorientierung. Du kannst eine Basisklasse "Fach" definieren, darin werden die Noten verwaltet und andere Dinge getan, die für alle Fäche gelten. Haupt- und Nebenfach sind dann Ableitungen davon. Dort kannst Du dann das machen, was für die beiden Varianten besonders ist. Dafür sind die Stichworte Operatoren "virtual" und "override" ein Blick wert.

Kommentar von NiklasRi ,

Das mit der basisklasse Fach hab ich gemacht (leider nicht erwähnt, sry) 

Du meinst also im Prinzip sollte ich lieber die Klassen Schulaufgaben, Stegreifaufgabe etc machen und als jede einzelne Note dann jeweils ein Objekt der klasse machen welches dann in einer Liste gespeichert wird? 

Kommentar von Palladin007 ,

Stell dir das so vor:
Du hast eine Sammlung von Fächern.
Jeder Schüler bekommt pro Fach für einige Aufgaben jeweils eine Note.
Die Aufgaben werden von dem Lehrer erstellt und können auch für andere Schüler verwendet werden.

So betrachtet stellt eine Aufgabe ein eigenes unabhängiges Objekt dar, es hat keinen Bezug zu irgendeiner Benotung.
Der Schüler hat dann eine Sammlung von Objekten, die jede Aufgabe, die er gelöst hat, zu der Note in Verbindung bringen. Dafür könntest Du z.B. das Dictionary verwenden, die Aufgabe ist der Key und die Note der Value. Allerdings darf jeder Schüler jede Aufgabe nur einmal lösen.

Das Vorgehen hat den Vorteil, dass Du theoretisch pro Aufgabe jede Benotung für jeden Schüler abfragen kannst.

Antwort
von GustavAT, 19

Dafür verwendet du am besten die Klasse List aus dem Namespace System.Collections.Generic. Mit den Methoden Add, AddRange, Remove kannst du neue Werte hinzufügen bzw. löschen. Da List das IEnumerable Interface implementiert kannst simple mit einer foreach Schleife die Elemente iterieren und auch Linq anwenden.

Antwort
von MindShift, 29

Das kannst du mit Arrays realisieren :) Durch Arrays kann man mehrere Werte unter einem Variablennamen speichern, doch keine Angst: Du kannst sie trotzdem noch voneinander differenzieren :)

Kommentar von PWolff ,

Wenn die Anzahl vorher nicht bekannt ist, empfehle ich Listen

List<Typ>

lässt sich wie ein Array handhaben, hat aber Vorteile, wenn es erweitert werden muss (inzwischen vielleicht nicht mehr - wenn Typname[] nur noch ein Alias für List<Typname> ist)

Kommentar von Palladin007 ,

Ein Array ist kein Alias für die Liste und wird es sehr wahrscheinlich auch nie sein. Das ist technisch etwas ganz anderes, die Liste nutzt intern das Array.

Antwort
von Alwin0702, 5

Ich wprde das so lösen:

List<int> intliste = new List<int>();

intliste.Add(8);

intliste.Add(1);

intliste.Add(2);

int i1 = intliste[0]; 

int i2 = intliste[1];

int i3 = intliste[2];

Antwort
von HanzeeDent, 32

Schonmal von Arrays gehört? Mit C# habe ich noch keine Erfahrungen, aber die Syntax kannst du ja googeln.

Keine passende Antwort gefunden?

Fragen Sie die Community