C# einer Variable mehrere Werte zuweisen?

6 Antworten

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.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler
Anonym37461 
Fragesteller
 10.09.2016, 17:45

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? 

0
Palladin007  10.09.2016, 18:11
@Anonym37461

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.

0

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.

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.

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];

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 :)

PWolff  10.09.2016, 02:10

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)

2
Palladin007  10.09.2016, 14:01
@PWolff

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.

0