Ambiguous user defined conversions
От: Qbit86 Кипр
Дата: 30.04.19 15:37
Оценка:
Добрый вечер!

Почему не компилируется неявная пользовательская конверсия в контексте кортежей? Какой пункт спецификации это описывает?
Если на то есть уважительные причины, то почему тогда компилируются другие пользовательские конверсии?

internal readonly struct Pair
{
    public Pair(string name, string type)
    {
        Name = name;
        Type = type;
    }

    internal string Name { get; }
    internal string Type { get; }

    public override string ToString() => $"{Name}: {Type}";

    public static implicit operator Pair((string, int) t) => new Pair(t.Item1, "int");

    public static implicit operator Pair((string, uint) t) => new Pair(t.Item1, "uint");
}

internal static class Program
{
    private static void Render(Pair pair)
    {
        System.Console.WriteLine(pair);
    }

    private static void Main()
    {
        const uint u = 23;
        Render(("u", u)); // u: uint

        const int m = -1;
        Render(("-", m)); // -: int

        const int i = 42;
        Render(("i", i)); // Error CS0457

        var t = ("t", i);
        Render(t); // t: int
    }
}


Текст ошибки:

Ambiguous user defined conversions 'Pair.implicit operator Pair((string, int))' and 'Pair.implicit operator Pair((string, uint))' when converting from '(string, int i)' to 'Pair'

Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 30.04.2019 15:39 Qbit86 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.