كيف يمكنني معرفة ما اذا كان قيمتين في ج # متساوية؟ (المعطاة أي نوع من القيمة)

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

نصائح أخرى

وفقط لتسليط الضوء على أسباب السلوك "الغريب" هو أنه عندما يلقي الباحث في الاعتراض على يحدث الملاكمة . يتم تحويل 3S اثنين إلى كائنات ثم كنت لا مقارنة الأرقام بعد الآن، كنت مقارنة الإشارات، والتي لن تكون هي نفسها.

لمعرفة ما اذا كان القيم الكائن هما على قدم المساواة استخدام هذا:

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

وهذا بالطبع نفس الجواب mike نيلسون الصورة:

if (Object.Equals(expectedValue, actualValue))

وحتى يذهب upvote جوابه.

if (expectedValue != null)
{
    if (expectedValue.Equals(actualValue))
    {
        // enter code here
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top