Wie kann ich überprüfen, ob zwei Werte in c # gleich sind? (Da jede Art von Wert)
Frage
Ich habe diesen Code hier, die jede Art von Argumenten ermöglichen soll:
public static void AreEqual(object expectedValue, object actualValue) {
if (expectedValue == actualValue) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
Wenn ich nenne es mit ein paar Ints ist es nicht sehr gut verhalten.
AreEqual(3, 3) // prints Not Equal
Lösung
Auf der einfachsten Ebene:
public static void AreEqual(object expectedValue, object actualValue) {
if (object.Equals(expectedValue,actualValue)) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
oder mit Generika (unterstützt IEquatable<T>
):
public static void AreEqual<T>(T expectedValue, T actualValue) {
if (EqualityComparer<T>.Default.Equals(expectedValue,actualValue)) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
}
Andere Tipps
Sie einfach den Grund für das „seltsame“ Verhalten hervorzuheben ist, weil, wenn Sie einen int zu gieße Objekt Boxen auftritt. Die beiden 3-Fettsäuren werden in Objekte konvertiert und dann Sie werden nicht mehr Zahlen zu vergleichen, Sie Referenzen vergleichen, die nicht die gleiche sein.
Um zu überprüfen, ob die beiden Objektwerte gleich Gebrauch sind dies:
if (Object.Equals(expectedValue, actualValue)) {
Wie die normalen == Betreiber übernehmen ein object
ein Referenztyp ist (trotz der Tatsache, dass Werttypen auch von Objekten absteigen).
Versuchen:
if (expectedValue.Equals(actualValue))
und natürlich müssen Sie null
zu handhaben, so dass Sie dies versuchen sollte:
Boolean eq = false;
if (expectedValue == null || actualValue == null)
eq = (expectedValue == actualValue);
else
eq = expectedValue.Equals(actualValue);
if (eq) {
HttpContext.Current.Response.Write("Equal");
} else {
HttpContext.Current.Response.Write("Not Equal");
}
Das ist natürlich die gleiche wie @ Mike nelson 's Antwort:
if (Object.Equals(expectedValue, actualValue))
so geht seine Antwort upvote.
if (expectedValue != null)
{
if (expectedValue.Equals(actualValue))
{
// enter code here
}
}