加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何调用具有可选参数的重载方法而没有编译器的歧义?

发布时间:2020-12-15 23:59:40 所属栏目:百科 来源:网络整理
导读:我在一个有两个重载的类中有一个静态函数.除了一个或两个参数外,两个重载都完全相同. string body是我的函数中唯一必需的参数,你可以看到,rest是可选参数.但是参数对象y和int x不应该结合在一起.所以我不得不写下两个重载.我提供了一个示例代码: public sta
我在一个有两个重载的类中有一个静态函数.除了一个或两个参数外,两个重载都完全相同. string body是我的函数中唯一必需的参数,你可以看到,rest是可选参数.但是参数对象y和int x不应该结合在一起.所以我不得不写下两个重载.我提供了一个示例代码:

public static void Foo(string body,string caption = "",int x = 0)
    {
        //leave it to me
    }

    public static void Foo(string body,object y = null)
    {
        //leave it to me
    }

现在当我想从其他类调用这个静态函数时,因为string body是唯一必需的参数,所以我有时会尝试写:

ClassABC.Foo("hi there");

这给了我:以下方法或属性之间的调用是模糊的.我知道为什么会发生这种情况,理想情况下解决方案是什么.但是我需要知道在C#中是否还可以做任何其他事情来解决这个问题.

显然,编译器对于选择要使用的函数感到困惑,但我不介意编译器的任何考虑都考虑到两者都没有int x和对象y.基本上三个问题:

>无论如何要告诉编译器“采取任何”(几乎不可能的任务,但仍然让我知道)?
>如果没有,无论如何我可以创建一个单独的功能来处理这两种情况吗?像这样的东西:

public static void Foo(string body,int x = 0 || object y = null) // the user should be able to pass only either of them!
{
    //again,I can handle this no matter what
}

>还有其他解决方法可以解决这个问题吗?

编辑:

>我无法重命名这两个功能.
>我无法创建更多的重载.这些组合不仅仅是可能的.我应该能够编写Foo(string body,int x)等等.如果参数超过10,则几乎不可能处理所有条件.简而言之,可选参数是必须的.

解决方法

添加一个单独的重载来处理具有一个或两个参数的案例.

public static void Foo(string body,string caption = "")
{
} 

public static void Foo(string body,string caption,int x)
{
}

public static void Foo(string body,object y)
{
}

如果您需要处理任意参数组合,那么可能是时候将可选参数分组到自己的类中了:

public sealed class Options
{
    public string Caption { get; set; }
    public int X { get; set; }
    public object Y { get; set; }
}

public static void Foo(string body,Options options)
{

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读