Информация об изменениях

Сообщение Re[7]: Анонимные типы от 07.03.2017 8:06

Изменено 07.03.2017 8:11 Sinix

Re[7]: Анонимные типы
Здравствуйте, busk, Вы писали:

S>>Поскольку анонимные типы — это чисто compile-time-фича, то ответственность за корректную реализацию на себя берёт компилятор, а не платформа, вот и вся разница.

B>не знал. Кстати интересные вещи открылись, что == и Equals дают разные значения для анонимного типа и тюпла в связи с этим

Ага. Что называется: собери все варианты:
        static void Main(string[] args)
        {
            var a = new { A = "A", B = "B" };
            var a2 = new { A = "A", B = "B" };
            var b = (A: "A", B: "B");
            var b2 = (A: "A", B: "B");
            var c = Tuple.Create("A", "B");
            var c2 = Tuple.Create("A", "B");

            Console.WriteLine(a==a2); // ok
            Console.WriteLine(b==b2); // CS0019 Operator '==' cannot be applied ...
            Console.WriteLine(c==c2); // Resharper's: Possible unintended reference comparison; to get a value comparison, use 'Equals' method
    
            Console.WriteLine("Done.");
            Console.ReadLine();

        }


но это ненадолго. В c# 7.x операторы для ValueTuple вернут.
Re[7]: Анонимные типы
Здравствуйте, busk, Вы писали:

S>>Поскольку анонимные типы — это чисто compile-time-фича, то ответственность за корректную реализацию на себя берёт компилятор, а не платформа, вот и вся разница.

B>не знал. Кстати интересные вещи открылись, что == и Equals дают разные значения для анонимного типа и тюпла в связи с этим

Ага. Что называется: собери все варианты:
        static void Main(string[] args)
        {
            var a = new { A = "A", B = "B" };
            var a2 = new { A = "A", B = "B" };
            var b = (A: "A", B: "B");
            var b2 = (A: "A", B: "B");
            var c = Tuple.Create("A", "B");
            var c2 = Tuple.Create("A", "B");

            Console.WriteLine(a==a2); // ok
            Console.WriteLine(b==b2); // CS0019 Operator '==' cannot be applied ...
            Console.WriteLine(c==c2); // Resharper's: Possible unintended reference comparison; to get a value comparison, use 'Equals' method
    
            Console.WriteLine("Done.");
            Console.ReadLine();
        }


но это ненадолго. В c# 7.x операторы для ValueTuple вернут.