Hallo Leute, ich habe einige der Komplexitäten meiner Bedürfnisse auf den Kern dessen reduziert, was ich wissen muss.
Ich möchte eine Sammlung von Werten an eine Methode senden, und in dieser Methode möchte ich den Wert z. B. mit einer Eigenschaft einer Entität vergleichen. Die Eigenschaft wird immer vom gleichen Typ sein wie der Wert.
Ich möchte auch testen, ob der Wert null oder der Standardwert ist, natürlich abhängig davon, ob der Werttyp ein Referenztyp oder ein Werttyp ist.
Wenn alle Werte, die an die Methode gesendet werden, vom gleichen Typ sind, könnte ich dies ganz einfach mit Hilfe von Generika tun, etwa so:
public static void testGenerics<TValueType>(List<TValueType> Values) {
//test null/default
foreach (TValueType v in Values) {
if (EqualityComparer<TValueType>.Default.Equals(v, default(TValueType))) {
//value is null or default for its type
} else {
//comapre against another value of the same Type
if (EqualityComparer<TValueType>.Default.Equals(v, SomeOtherValueOfTValueType)) {
//value equals
} else {
//value doesn't equal
}
}
}
}
Meine Frage ist, wie würde ich dieselbe Funktion ausführen, wenn meine Sammlung Werte unterschiedlicher Typen enthielte.
Meine Hauptanliegen sind die erfolgreiche Erkennung von Null- oder Standardwerten und die erfolgreiche Erkennung, ob jeder übergebene Wert mit einem anderen Wert desselben Typs übereinstimmt.
Kann ich dies erreichen, indem ich einfach das Typobjekt übergebe? Ich kann auch nicht wirklich die EqualityComparers verwenden, da ich keine Generika verwenden kann, weil ich in übergeben werde eine unbekannte Anzahl von verschiedenen Typen .
Gibt es eine Lösung?
danke
UPDATE
ok, suchen um, könnte ich den folgenden Code verwenden, um für null/Standard erfolgreich in meinem Szenario zu testen (aus diese SO-Antwort ):
object defaultValue = type.IsValueType ? Activator.CreateInstance(type) : null;
Ich denke, das könnte funktionieren.
Wie kann ich nun zwei Werte desselben Typs erfolgreich vergleichen, ohne ihre Typen zu kennen? erfolgreich und zuverlässig?