Forum: PC-Programmierung C# Referenz auf Referenz?


von Be B. (bebo)


Lesenswert?

Kann man in C# Referenzen auf Referenzen verwenden.
1
List<int> list = new List<int>();
2
List<int> reference = list; // zeigt jetzt auf list
3
reference = new List<int>(); // neue liste in referece, aber immer noch die alte in list

Das Beispiel funktionniert zwar, macht aber nicht was ich will.
Was ich möchte ist:
- Ich habe in einem Objekt verschiedene Listen.
- In Abhängigkeit von verschiedenen Bedingungen, möchte ich mir eine 
Liste Rauspicken und sie mir für später im Programm in einer 
Referenzvariable merken. Oder besser gesagt, mich interessiert nicht die 
Liste selber, sondern die Referenzvariable, die auf die Liste zeigt.
- Es muß möglich sein, der Variable "list" im Beispiel mit Hilfe von 
"reference" zu einem späteren Zeitpunkt eine neue Liste zuzuweisen.

Geht das?

von Martin (Gast)


Lesenswert?

List ist immer die Referenz. Und du kannst ihr jederzeit eine andere 
Liste zuweisen.

von Be B. (bebo)


Lesenswert?

Es geht nicht darum, "list" direkt eine neue Liste zuzuweisen, sondern 
darum, daß ich irgendwo im Programm eine von mehreren Listen auswählen 
möchte und irgendwo anders im Programm dann diese ausgewählte Liste 
durch eine neue Ersetzen möchte.

Das heißt, ich brauche eine Referenz auf die Referenz von "list", damit 
ich darüber der Referenz eine neue Liste zuweisen kann.

In C++ wäre das dann wohl sowas wie ein Pointer auf die Referenz der 
Liste. Ich will ja nicht die Liste manipolieren, sondern dem 
Referenzobjekt eine neue Liste zuweisen.

von Peter II (Gast)


Lesenswert?

dann leg doch eine neue klasse an. Diese hat als member nur eine 
Referenz auf die aktuelle liste.

Das Objekt dieser klasse kannst du dann überall haben.

von Be B. (bebo)


Lesenswert?

Wäre eine Möglichkeit, wenn auch etwas umständlich. Ich suche mal 
weiter. Kann ja nicht sein, daß sowas in C# garnicht möglich ist.

von Peter II (Gast)


Lesenswert?

Be Bo schrieb:
> Wäre eine Möglichkeit, wenn auch etwas umständlich. Ich suche mal
> weiter. Kann ja nicht sein, daß sowas in C# garnicht möglich ist.

man kann auch daten in application ablegen, dort kannst du von überall 
drauf zugreifen.
Wenn man für dinge keine schnell lösung finden, dann ist das meist ein 
zeichen dafür das man etwas komplett anders macht als sonst üblich.

von Be B. (bebo)


Lesenswert?

Naja, das genau Problem sieht wie folgt aus.

- Ich habe 4 Listen.
- Davon möchte ich 2 dynamisch auswählen und mir je in einer 
Hilfs-Variable merken.
Mit der einfachen Zuweisung ist es dann zwar möglich, über meine 
Hilfs-Variable auf die Ausgewählten listen zuzugreifen, aber ich kann 
die Listen nicht ersetzen.

Was ich nun suche ist eine Möglichkeit mit Hilfe von Hilfsvariablen die 
2 ausgewählten Listen zu vereinen (z.B. liste1.Union(Liste2).toList();). 
Diese Funtion gibt eine neue gemergte Liste zurück, in der alle 
doppelten Einträge entfernt sind.

Nun möchte ich diese vereinigte Liste den 2 Ausgewählten 
Listenreferenzen zuweisen.

Beispiel:
Liste 1: 1,2,6,8,9 Ausgewält
Liste 2: 4,5,7
Liste 3: 3,4,5,6 Ausgewählt
Liste 4: 5,8,4

neue Liste aus 1 und 3: 1,2,3,4,5,6,8,9

Diese neue Liste soll jetzt 1 und 3 zugeweisen werden. Aber ich will die 
Auswahl nicht noch einmal durchführen. Also muß ich mir irgendwie die 
Ausgewählten Referenen auf Listen merken, um jetzt die alten Listen 
durch meine neue zu ersetzen.

von Peter II (Gast)


Lesenswert?

Be Bo schrieb:
> - Ich habe 4 Listen.
> - Davon möchte ich 2 dynamisch auswählen und mir je in einer
> Hilfs-Variable merken.

wozu denn die hilfsvariable?

Mach doch eine methode:

List<> GetAktList() {
}

und dieser liefert immer die aktuelle liste zurück, damit kannst du dann 
von überall darauf zugreifen.

von Be B. (bebo)


Lesenswert?

Die Funktion liefert aber auch nur eine Referenz auf die Liste und nicht 
auf die Referenz der Liste.

von Peter II (Gast)


Lesenswert?

Be Bo schrieb:
> Die Funktion liefert aber auch nur eine Referenz auf die Liste und nicht
> auf die Referenz der Liste.

richtig, jedes mal wenn du die liste braucht, rufst du die funktion auf.

von Sebastian L. (Gast)


Lesenswert?

Ja eine verwaltungsklasse wäre nicht schlecht

du kannst dir aber doch die auswahl als string oder enum merken

also sowas wie

Listen { Liste1, Liste2}

class ListenVerwalter <T>
{

Dictinary<Listen,List<T>> listen

void Create(Listen e,List<t> l);
void Override(Listen e,List<t> l);
List<T> Get(Listen e);
}

und dann

Listen auswahl1;
Listen auswahl2;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.