Du hast kein Problem dazu geschrieben bei dem Du Hilfe brauchst
Ich denke, Du möchtest eine Liste haben, wo der Wert, der in SubItem[3] steht, eindeutig sein soll, oder?
Dein Code hat dabei eine ganz gewaltige Schwachstelle:
Nehmen wir an, Du hast 10 Items, eines davon hat den Namen, der neu dazu kommen soll.
Du läufst dann jedes Item durch und wenn das den Namen nicht hat, wird ein Item hinzu gefügt.
Das Resultat: Zu den 10 Items kommt 9 mal das neue Item hinzu, am Ende hast Du also 8 Items zu viel und den Namen, der eindeutig sein soll, 10 mal in der Liste vorhanden.
Ich würde es eher so lösen:
Du legst eine List<string> an.
Wenn Du durch die vorhandenen Items gehst, dann fügst Du dieser Liste den Name jedes Items (bzw. SubItem[3]) hinzu.
Danach hast Du alle bereits vorhandenen Namen in dieser Liste und kannst mit Contains prüfen, ob es den neuen Namen bereits gibt.
Oder als LINQ-Lösung:
Du castest die Items mit Cast in den richtigen Typen (Da die meisten Auflistungen bei WinForms untypisiert sind) und machst anschließend ein Select auf den Text von SubItem[3].
Am Ende hast Du eine Auflistung aller vorhandenen Namen und kannst anschließend ein Contains machen.
Ist geschmackssache, ich mag LINQ ganz gerne und würde es auch hier nutzen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| var existingNames = liste.listView1.Items.Cast<ListViewItem>().Select(item => item.SubItems[3].Text);
if (existingNames.Contains(Nameimprojekt)) else |