чтобы увидеть, может ли это быть улучшено в будущей версии языка.

дуя новые функции в C # 7.x, я создал следующий класс:

using System;
namespace ValueTuples
{
    public class Person
    {
        public string Name { get; }
        public DateTime BirthDate { get; }

        public Person(string name, DateTime birthDate)
        {
            Name = name;
            BirthDate = birthDate;
        }

        public void Deconstruct(out string name,
            out int year, out int month, out int day)
        {
            name  = Name;
            year  = BirthDate.Year;
            month = BirthDate.Month;
            day   = BirthDate.Day;
        }

        public void Deconstruct(out string name,
            out int year, out int month, 
            out (int DayNumber, DayOfWeek DayOfWeek) day)
        {
            name = Name;
            year = BirthDate.Year;
            month = BirthDate.Month;
            day.DayNumber = BirthDate.Day;
            day.DayOfWeek = BirthDate.DayOfWeek;
        }
    }
}

И следующий тестовый код:

using System;
namespace ValueTuples
{
    class MainClass
    {
        static void Main()
        {
            var dh = new Person("Dennis", new DateTime(1985, 12, 27));
            // DECONSTRUCTION:
            (string name, _, _, (_, DayOfWeek dow)) = dh;
            Console.WriteLine($"{name} was born a {dow}");
        }
    }
}

Если класс Person включает только перегрузку SECOND Deconstruct, код компилируется и работает нормально («Деннис родился в пятницу»). Но как только первая перегрузка добавлена в Person, компилятор начинает жаловаться, сообщая об ошибке:

Вызов неоднозначен между следующими методами или свойствами: «Person.Deconstruct (out string, out int, out int, out int)» и «Person.Deconstruct (out string, out int, out int, out (int DayNumber, DayOfWeek») DayOfWeek)) '(CS0121) (ValueTuples)

Я прочитал документацию по MSDN и GitHub, но мне не ясно, почему компилятор не может определить, что единственной применимой перегрузкой является вторая, учитывая шаблон внутреннего кортежа в левой части назначения. Любые разъяснения будут оценены.

Ответы на вопрос(1)

Ваш ответ на вопрос