Как я могу проверить, равны ли два значения в c #?(Задается любой тип значения)
Вопрос
У меня здесь есть этот код, который предназначен для разрешения аргументов любого типа:
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
}
}