我有这个类
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)
之间产生歧义!显然,歧义中涉及的两个方法都不是新添加的方法,因为第一个是params,第二个是泛型。
这是一个bug吗?规范的哪一部分说明应该是这种情况?
'Overloaded.ComplexOverloadResolution(string)'
并不是指<string>(string)
方法,而是指没有提供对象的(string, object)
方法。 - phoog