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

Printed on: April 20, 2024 at 01:04 o'clock

Member: ErikM87
ErikM87 Dec 31, 2016 at 01:38:47 (UTC)
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 Dec 31, 2016 updated at 08:57:44 (UTC)
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
Member: ErikM87
ErikM87 Dec 31, 2016 at 12:30:09 (UTC)
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 Dec 31, 2016 updated at 13:08:28 (UTC)
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.
Member: mayho33
mayho33 Jan 01, 2017 at 21:37:52 (UTC)
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