Wie kann ich überprüfen, ob zwei Werte in c # gleich sind? (Da jede Art von Wert)

StackOverflow https://stackoverflow.com/questions/828896

  •  06-07-2019
  •  | 
  •  

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
War es hilfreich?

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
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top