我在 C# 中有一个包含以下方法的类:
public MyRetType MyMethod(String p1 = null)
{
MyMethod(<default values>);
}
public MyRetType MyMethod(String p1, String p2, MyClass1 p3, String p4 = null, MyClass2 p5 = null)
{
...
}
我必须添加一个新的可选参数。为了保持向后兼容性,我添加了几个方法,每个方法多了一个参数,并且重写了以前的方法来调用新的方法:
public MyRetType MyMethod(String p1 = null, IEnumerable<int> pnew = null)
{
MyMethod(<default values>);
}
public MyRetType MyMethod(String p1)
{
return MyMethod(p1, null);
}
public MyRetType Launch(String p1, String p2, MyClass1 p3, IEnumerable<int> pnew , String p4 = null, MyClass2 p5 = null)
{
...
}
public MyRetType MyMethod(String p1, String p2, MyClass1 p3, String p4= null, MyClass2 p5 = null)
{
return MyMethod(p1, p2, p3, null, p4, p5);
}
这似乎在 C# 中有效,尽管我知道仅使用 null 调用 MyMethod 会产生歧义(它可能是最后一个 list 中的前两个方法中的任何一个)。
但是,当尝试从 Visual Basic 调用 MyMethod 时,它未在智能感知中列出。如果我手动编写,则会出现错误:“Ambigously call”。
为什么会发生这种情况?
最佳答案
您需要放弃可选参数并坚持使用重载 - 如果您已经获得了没有可选参数的重载,那么可选参数的意义就有点小了:
public MyRetType MyMethod()
{
return MyMethod(null,null);
}
public MyRetType MyMethod(String p1)
{
return MyMethod(p1,null);
}
public MyRetType MyMethod(String p1, IEnumerable<int>)
{
MyMethod(<default values>);
}
关于c# - 为什么我在 vb 中得到不明确的调用,而在 c# 中却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023465/