c# - 为什么我在 vb 中得到不明确的调用,而在 c# 中却没有?

标签 c# .net vb.net visual-studio-2010 ambiguous-call

我在 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/

相关文章:

c# - 当应用程序以不同用户身份运行时,如何获取当前登录的用户名和帐户类型(admin、nonadmin)

C# 与 VB.NET 按位或

c# - Matrix.RotateAt 方法对于某些角度是否存在错误? .Net Winforms

c# - 事务(进程 ID xx)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品。重新运行交易

c# - 查询 C# 中表名中的单引号

c# - 从 asp.net 复选框调用 JavaScript 函数

c# - 如何测试 XML 字符串在 .net 中的格式是否正确

c# - TaskScheduler - 执行延续

c# - Xamarin.iOS 具有等效标识错误的多个程序集

.net - 如何在 Expression Blend 中格式化 XAML?