Hallo,
ich habe 2 Listen mit Objekten der Klasse Contact (MS - Graph).
Wie kann ich die Objekte der Liste vergleichen ohne die Klasse zu ändern ?
Folgende Datentypen werden Verwendet:
Was ich genau benötige:
Ich bekomme zum beispiel alle 24 Stunden eine Aktualisiert Liste (Liste2).
Die Liste2 muss ich Vergleichen mit der Liste vom Vortag (Liste1).
Wenn ein Wert sich geändert hat, beispiel die Telefonnummer, sollte ich durch den Objekt Vergleich so etwas abfangen können und auf die Veränderung Reagieren können.
Jemand einen guten Vorschlag ? Steh hier etwas auf den Schlauch....:D
Es wird Verwendet:
Das kommt drauf an, was Du machen willst.
Willst Du auf eine einzelne Sache reagieren: ausprogrammieren.
Willst Du nur wissen ob sie gleich sind oder nicht: gibt verschiedene Möglichkeiten, zB IComparer
Aber das Vergelichen von Objekten in .NET ist eher ein Alltagsthema.
Da findest tausende von Möglichkeiten via Google. Einfach mal selbst bisschen suchen:
Google-Suche nach c# compare two objects
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
IComparer würde hier nicht funktionieren, da ich die Klasse nicht Verändern kann.
mit Equals funktioniert es auch nicht.
using System.IO;
using System.Xml.Serialization;
static class ObjectHelpers
{
public static string SerializeObject<T>(this T toSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
using (StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
}
public static bool EqualTo(this object obj, object toCompare)
{
if (obj.SerializeObject() == toCompare.SerializeObject())
return true;
else
return false;
}
public static bool IsBlank<T>(this T obj) where T: new()
{
T blank = new T();
T newObj = ((T)obj);
if (newObj.SerializeObject() == blank.SerializeObject())
return true;
else
return false;
}
}
Was ein gutes beispiel ist zum Vergleichen von Objekten ist (was ich auch mal Verwendet habe, großartig Funktioniert):
Link:
https://stackoverflow.com/a/53624723/11926104
Das funktioniert bei mir leider auch nicht da, wie oben erwähnt, die Klasse aus MS Graph kommt.
Fehler:> Fehlermeldung:
System.InvalidOperationException: 'Fehler beim Reflektieren des Typs 'Microsoft.Graph.Contact'.'
Dass ein Objekt nicht serialisierbar ist, ist nichts ungewöhnliches.
Dann kannst eben nicht den Serialize-Weg gehen sondern musst entweder vorher in ein eigenes Objekt mappen oder manuell vergleichen.
Siehste auch genug Beispiele bei genanntem Google Link.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Biggi12
Wenn deine Klassen generiert worden sind, kann es sein, dass sie das Keyword partial vor dem class haben. Dann kannst du die generierte Klasse mit eigenem Code erweitern.
Ansonsten gäbe es da auch noch den https://www.nuget.org/packages/equalidator/.
Gruß, Alf