سؤال

لماذا هذا return False

    public enum Directions { Up, Down, Left, Right }

    static void Main(string[] args)
    {
        bool matches = IsOneOf(Directions.Right, Directions.Left, Directions.Right);
        Console.WriteLine(matches);
        Console.Read();
    }

    public static bool IsOneOf(Enum self, params Enum[] values)
    {
        foreach (var value in values)
            if (self == value)
                return true;
        return false;
    }

في حين أن هذا يعود صحيحا ؟

    public static bool IsOneOf(Enum self, params Enum[] values)
    {
        foreach (var value in values)
            if (self.Equals(value))
                return true;
        return false;
    }
هل كانت مفيدة؟

المحلول

التعداد لا تنفذ == المساواة مشغل ولكنه تجاوز أسلوب يساوي.

لأنه لا تنفذ = = النظام ينفذ إشارة المساواة الاختيار.علما بأن النظام.Enum هي فئة لا بنية.ومن ثم قيم مثل الاتجاهات.غادر محاصر.في هذه الحالة بالذات ، محاصر الكائنات في نهاية المطاف كونها كائنات منفصلة ، وبالتالي فشلوا في إشارة المساواة الاختبار.

المترجم يفهم == ملموسة أنواع التعداد (مثل الاتجاهات) لكن المترجم لا تفعل هذا معالجة خاصة ضد النظام.نوع التعداد.

نصائح أخرى

وكما يقول JB، الملاكمة. يمكنك ان ترى هذا عن طريق تغيير من التعداد إلى الاتجاهات:

public static bool IsOneOf(Directions self, params Directions[] values)
{
    foreach (var value in values)
        if (self == value)
            return true;
    return false;
}

ويتم إرجاعها صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top