Frage

Ich möchte zwei Werte zur Laufzeit vergleichen Reflexion verwendet wird. Ich war mit Comparer.Default.Compare (x, y) für diesen, aber ich habe erkannt, dass dies nicht ausreichend ist. Lassen Sie uns sagen, dass ich ein Doppel zu einem einzigen (1,0 == 10) vergleichen möchten. Comparer.Default wird eine Ausnahme werfen, weil sie darauf besteht, dass beiden Werte vom gleichen Typ sein müssen (double). Jedoch eine explizite Konvertierung existiert für diese, was wirklich ist, was ich verwenden möchte.

Also, warum nicht kann ich nur Convert.ChangeType benutzen? Nehmen wir den Fall von 1,25> 1 (double> integer). Wenn ich versuche, Convert.ChangeType (1,25, typeof (int)) auf 1,25, ich will 1 erhalten, und die Behauptung über fehlschlagen, wenn es wirklich 1.25> 1.

So kann jemand vorschlagen, bitte einen Weg, um den expliziten Vergleich von Aufrufen (falls vorhanden), dass ein Typ aus?

Danke.

War es hilfreich?

Lösung

Sind Sie mit C # 4 und .NET 4? Wenn ja, es ist wirklich einfach mit dynamischer Typisierung:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever

Der Compiler führt alle entsprechenden Conversions für Sie.

Andere Tipps

Wenn C # 4 ist eine Option, Jon Skeet Vorschlag von dynamischen mit ist höchstwahrscheinlich ideal.

Wenn es nicht ist, dann ...

Es gibt keine expliziten Vergleich. Der Compiler, bei der Kompilierung, funktioniert die Konvertierung, ruft dann den entsprechenden Vergleich.

Ihre beste Wette ist Convert.ChangeType zu konvertieren, um die breitere Art zu verwenden, und führen Sie dann den Vergleich auf dem Ergebnis. Wenn Sie nicht Überprüfung aller Art behandeln möchten, können Sie in der Regel beide Seiten konvertieren decimal Werte, dann einen einzigen Vergleich, um sie zu überprüfen, da decimal sollten angemessen alle Ihre Werte verarbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top