yanmai
Goto Top

C-sharp List verschiedene Bedingungen

Hallo liebe Administratoren,
ich habe eine Liste vom Typ eines Objektes. Diese Liste wird (de)serialisiert, um die Daten zu speichern und zu öffnen, dass geschieht über XML. Soweit gibt es keine Probleme damit. Das Objekt besteht aus 2 Eigenschaften (Strings).
Wenn der Benutzer der Liste nun ein neues Objekt hinzufügt, soll geschaut werden, ob es schon einen Eintrag mit dem selben Namen in der Liste gibt. Also in einer SQL Datenbank würde ich diese Property auf Unique setzten, aber in C# muss ich ja erst abfragen, ob es diesen Wert schon gibt.
Und wie kann man dann ein einziges Objekt anhand eines Wertes wieder löschen?

Mit freundlichen Grüßen face-smile

Content-Key: 325124

Url: https://administrator.de/contentid/325124

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: ErikM87
ErikM87 31.12.2016 um 02:38:47 Uhr
Goto Top
Du könntest das mit einer LINQ-Abfrage machen


if (deineListe.FirstOrDefault(x=>x.DeinProperty == "gefragter Wert") == null) {

//Objekt ist noch nicht vorhanden
deineListe.Add(neuesObjekt);

} else {

}
Mitglied: 131381
131381 31.12.2016 aktualisiert um 09:57:44 Uhr
Goto Top
Oder man nimmt als Array ein Objekt vom Typ Hashtable, Collection oder ArrayList. Die bieten alle Funktionen um abzufragen ob ein bestimmter Key schon existiert und auch um Einträge wieder aus der Collection zu löschen.

Gruß und ein erfolgreiches Jahr 2017
mik
Mitglied: ErikM87
ErikM87 31.12.2016 um 13:30:09 Uhr
Goto Top
Daran hatte ich auch gedacht.. Aber er erwähnte (De)serialisierung und das ist mit Hashtable und Konsorten immer so eine Sache, ob der jeweilige Serialisierer damit zurecht kommt..


Welche Funktionen bieten Collection oder Arraylist um einen bestimmten Key zu prüfen ?
Mitglied: 131381
131381 31.12.2016 aktualisiert um 14:08:28 Uhr
Goto Top
Zitat von @ErikM87:

Welche Funktionen bieten Collection oder Arraylist um einen bestimmten Key zu prüfen ?

Collection.Contains()
Arraylist.Contains()
etc.

Jede dieser Arrays bietet auch die Möglichkeit eigene Find-Routinen mit einem IComparer zu koppeln.

Aus einer Hashtable lässt sich leicht auch wieder was serialisierbares wandeln.

Also alles in allem jede Menge Möglichkeiten. Wie immer führen viele Wege nach Rom face-smile

Linq ist zwar schön und gut, aber im Vergleich doch ziemlich langsam.

An seiner Stelle würde ich das alles gleich in einer Klasse kapseln.

Denke diese Denkantstöße sollten dem TO reichen.
Mitglied: mayho33
mayho33 01.01.2017 um 22:37:52 Uhr
Goto Top
Du könntest deine Daten in ein Dictionary<string, string> einlesen und den neuen Wert hinzufügen. Wäre genau der gleiche Wert bereits vorhanden wirft es einen Fehler (muss also mit Try/Catch abgefangen werden)

Bei Namen aber eher unbrauchbar:

Hans Zimmer
Hans Hinterseher => Error

Oder in eine List<T> einlesen den neuen Wert ergänzen und mit .Distinct() wieder zurück schreiben

Grüße

Mayho