C# Forearch meldet Fehler bei mehr als 1 Durchlauf

Murphy9904

Lt. Junior Grade
Registriert
Mai 2007
Beiträge
344
Hi,
ich will Die Objekte aus meiner List Box in ein String schreiben,
meiner meinung nach müsste das so funktionieren:


Code:
MyListBoxItem[] items = new MyListBoxItem[ListBoxRight.Items.Count];
                    ListBoxRight.SelectedItems.CopyTo(items, 0);
                        foreach (var item in items)
                        {
                            String += item.Name + " / " + item.Alias; //<-- Fehler: Object reference not set to an instance of an object.
                        }


tus aber nich, was mach ich falsch?

Danke schonmal
LG Murphy
 
Zuletzt bearbeitet:
Hallo Murphy,

ich kann da jetzt so auf Anhieb keinen Fehler sehen, aber warum machst du es nicht direkt so:

Code:
String s = String.Empty;
foreach(Item i in ListBoxRight.SelectedItems)
  s += string.format("{0}/{1}", i.Name, i.Alias);
 
String += item.Name

da ist der fehler, du musst eine Intanz vom Typ string anlegen und diese dann meinetwegen bla nennen;

also

string bla = string.Empty;

und dann inder foreach:

bla += item.Name

//achja stringbuilder ist tatsächlich zu empfehlen, da er für jede string operation ein neues objekt anlegt und diese ggf. nicht sauber aufgeräumt werden..
 
Ja das hatt ich ja gemacht...(habs nur vergessen mitzuposten)

den Code vom Freeman4gu blick ich iwie nich ganz..
 
dein fehler ist simple du initialisierst ein array mit der größe der Items in der Liste, aber "kopierst" nur die items der SelectedItems enumeration... daher bekommst du eine NullReferenceException sobald die Anzahl der Items größer ist als die der SelectedItems
 
Zuletzt bearbeitet:
Hi,

was gibt es da nicht zu verstehen?
Er kopiert die SelectedItems nicht nochmal in eine temporäre Liste, sondern greift innerhalb der foreach-Schleife direkt auf alle selektierten items zu!
Am Anfang wird ein Leerstring initialisiert, und dann wird diesem immer wieder ein String dran gehangen mit der String.Format() Methode...


Grüße,
Stephan
 
ok..
Also ich hab den Fehler..
ich lese die "Items" ja aus ner list box aus und er schaut sich die Gesamtanzahl an und bearbeitet aber nur die Selektierten (eig will ich ja alle)

sorry leichtsinnsfehler..
 
huch, stimmt das += ist natürlich auch dämlich ^^
würds dann wohl eher so machen

Code:
s = string.format("{0}{1}/{2}", s, i.Name, i.Alias);

hmm, obwohl das natürlich trotzdem jedes mal ein neues Objekt anlegen würde ^^
also doch besser den Stringbuilder
 
String.Concat macht doch Sinn... es sind die ganzen 300 Millisekunden schneller als die "+" Operator. Naja ich habe den vergleich auf eine gesamte Methode angewandt und nicht auf einen Befehl. Ich muss noch anmerken, ich habe Dualcore mit 3 GHz Pro Core. ein langsamerer PC würde dafür nicht mehr 300 ms brauchen, sondern mehr.
 
Zurück
Oben