У меня этот класс
public class Overloaded
{
public void ComplexOverloadResolution(params string[] something)
{
Console.WriteLine("Normal Winner");
}
public void ComplexOverloadResolution<M>(M something)
{
Console.WriteLine("Confused");
}
}
Если я назову это так:
var blah = new Overloaded();
blah.ComplexOverloadResolution("Which wins?");
Он записывает Normal Winner
в консоль.
Но если я добавлю другой метод:
public void ComplexOverloadResolution(string something, object somethingElse = null)
{
Console.WriteLine("Added Later");
}
Я получаю следующую ошибку:
Вызов неоднозначен между следующими методами или свойствами: > '
Overloaded.ComplexOverloadResolution(params string[])
' и 'Overloaded.ComplexOverloadResolution<string>(string)
'
Я понимаю, что добавление метода может привести к неоднозначности вызова, но это двусмысленность между двумя уже существовавшими методами (params string[])
и <string>(string)
! Очевидно, что ни один из двух методов, участвующих в двусмысленности, не является новым добавленным методом, поскольку первый является параметром, а второй является общим.
Это ошибка? Какая часть спецификации говорит, что это должно быть так?