Deterministische UUID / Hash aus einem Objekt oder seinen Eigenschaften in .NET C#
Posted: 20 Mar 2025, 23:03
Ich muss eine Möglichkeit, eine eindeutige ID mit einem Objekt oder einer Untergruppe von Eigenschaften aus dem Objekt über .NET -Frameworks /-umgebungen /-ausführungen mit minimalen Kollisionen konsistent zu erzeugen. von Strings, INTs und Dezimalstellen < /li>
Die Werte der Eigenschaften sind keine sensiblen Daten < /li>
Die Eigenschaften werden nicht hinzugefügt oder entfernt < /li>
Die Anwendung, die dies verwendet, ist nur intern (nicht für die Öffentlichkeit) < /li>
Ich kann nicht übergezogen werden. Ausführungen, wie in diesem großartigen Artikel bei Andrewlock.net
Er schlägt eine mögliche Methode vor, liefert jedoch nicht viele Informationen zur realen Welt. die Genauigkeit in verschiedenen Umgebungen unterschiedlich verarbeiten?
Die Werte der Eigenschaften sind keine sensiblen Daten < /li>
Die Eigenschaften werden nicht hinzugefügt oder entfernt < /li>
Die Anwendung, die dies verwendet, ist nur intern (nicht für die Öffentlichkeit) < /li>
Ich kann nicht übergezogen werden. Ausführungen, wie in diesem großartigen Artikel bei Andrewlock.net
Er schlägt eine mögliche Methode vor, liefert jedoch nicht viele Informationen zur realen Welt.
Code: Select all
public class ExampleObject
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public int Prop3 { get; set; }
public decimal Prop4 { get; set; }
}
< /code>
Ich habe darüber nachgedacht, alle Werte in eine Zeichenfolge umzuwandeln, sie zu verkettet und dann einen deterministischen Algorithmus zu verwenden, um das gewünschte Ergebnis zu erhalten. < /p>
// Convert all values to strings and concat
string str1 = "a";
string str2 = "b";
int int1 = 1;
decimal dec1 = 1.2m;
string concatStr = $"{str1}_{str2}_{int1.ToString()}_{dec1.ToString()}";
// Use the string to generate the desired value
< /code>
Ich habe gesehen, wie Leute einen MD5 -Hash aus der Zeichenfolge generieren oder mir nicht sicher sind, dass die reale Nutzung für Millionen möglicher Kombinationen der Saiten /INTs /Dezimalstellen. Der Wert sollte sich nicht ändern, aber könnte der .ToString ()