Сообщение Ambiguous user defined conversions от 30.04.2019 15:37
Изменено 30.04.2019 15:39 Qbit86
Ambiguous user defined conversions
Добрый вечер!
Почему не компилируется неявная пользовательская конверсия в контексте кортежей? Какой пункт спецификации это описывает?
Если на то есть уважительные причины, то почему тогда компилируются другие пользовательские конверсии?
Текст ошибки:
Почему не компилируется неявная пользовательская конверсия в контексте кортежей? Какой пункт спецификации это описывает?
Если на то есть уважительные причины, то почему тогда компилируются другие пользовательские конверсии?
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.ToString());
}
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'
Ambiguous user defined conversions
Добрый вечер!
Почему не компилируется неявная пользовательская конверсия в контексте кортежей? Какой пункт спецификации это описывает?
Если на то есть уважительные причины, то почему тогда компилируются другие пользовательские конверсии?
Текст ошибки:
Почему не компилируется неявная пользовательская конверсия в контексте кортежей? Какой пункт спецификации это описывает?
Если на то есть уважительные причины, то почему тогда компилируются другие пользовательские конверсии?
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'