none
Сравнение упакованных типов RRS feed

  • Вопрос

  • Столкнулся с такой проблемой. 

    using System;
    
    namespace ConsoleApplication10
    {
        class Program
        {
            static void Main(string[] args)
            {
                object val0 = 5;
                object val1 = 5;
    
                Console.WriteLine(val0 == val1);
                
                Console.ReadLine();
            }
        }
    }
    На консоли выводится false, что надо сделать что бы было true ? Если мне известно, только то что значения ValueType ??

    25 апреля 2012 г. 6:12

Ответы

  • Здравствуйте.

    Так происходит потому что сравниваются ссылки на объекты, а они разные. Используйте вместо == метод Equals:

            static void Main(string[] args)
            {
                object a = 5;
                object b = 5;
                Console.WriteLine(a.Equals(b));
            }


    Для связи [mail]

    • Помечено в качестве ответа Max Charp 25 апреля 2012 г. 6:47
    25 апреля 2012 г. 6:36
  • Можно так:

    static void Main(string[] args)
    {
        object val0 = 5;
        object val1 = 5;
    
        Console.WriteLine(ValueTypeCompare(val0, val1));
    
        Console.ReadLine();
    }
    
    private static bool ValueTypeCompare(object val0, object val1)
    {
        return val0.GetType() == val1.GetType() && val0.ToString() == val1.ToString();
    }

    25 апреля 2012 г. 6:37
    Отвечающий

Все ответы

  • Здравствуйте.

    Так происходит потому что сравниваются ссылки на объекты, а они разные. Используйте вместо == метод Equals:

            static void Main(string[] args)
            {
                object a = 5;
                object b = 5;
                Console.WriteLine(a.Equals(b));
            }


    Для связи [mail]

    • Помечено в качестве ответа Max Charp 25 апреля 2012 г. 6:47
    25 апреля 2012 г. 6:36
  • Можно так:

    static void Main(string[] args)
    {
        object val0 = 5;
        object val1 = 5;
    
        Console.WriteLine(ValueTypeCompare(val0, val1));
    
        Console.ReadLine();
    }
    
    private static bool ValueTypeCompare(object val0, object val1)
    {
        return val0.GetType() == val1.GetType() && val0.ToString() == val1.ToString();
    }

    25 апреля 2012 г. 6:37
    Отвечающий