Как я могу проверить, равны ли два значения в c #?(Задается любой тип значения)

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

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня здесь есть этот код, который предназначен для разрешения аргументов любого типа:

public static void AreEqual(object expectedValue, object actualValue) {
    if (expectedValue == actualValue) {
        HttpContext.Current.Response.Write("Equal");
    } else {
        HttpContext.Current.Response.Write("Not Equal");
    }
}

Если я вызываю его, используя пару целых чисел, он ведет себя не очень хорошо.

AreEqual(3, 3)   // prints Not Equal
Это было полезно?

Решение

На самом простом уровне:

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");
    }
}

Или с обобщениями (поддерживает 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");
    }
}

Другие советы

Просто чтобы подчеркнуть причину "!" странного "!" Это происходит потому, что при приведении int к объекту возникает бокс . Две тройки преобразуются в объекты, и вы больше не сравниваете числа, вы сравниваете ссылки, которые не будут одинаковыми.

Чтобы проверить, равны ли два значения объекта, используйте это:

if (Object.Equals(expectedValue, actualValue)) {

Поскольку обычный оператор == предполагает, что object является ссылочным типом (несмотря на тот факт, что типы значений также происходят от объектов).

Попробуй:

if (expectedValue.Equals(actualValue))

и, конечно, вам нужно справиться null, так что вам стоит попробовать это:

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");
}

Это, конечно, то же самое, что @майк Нельсонвот ответ:

if (Object.Equals(expectedValue, actualValue))

так что проголосуйте за его ответ.

if (expectedValue != null)
{
    if (expectedValue.Equals(actualValue))
    {
        // enter code here
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top