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

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

概述我在一个有两个重载的类中有一个静态函数.除了一个或两个参数外,两个重载都完全相同. string body是我的函数中唯一必需的参数,你可以看到,rest是可选参数.但是参数对象y和int x不应该结合在一起.所以我不得不写下两个重载.我提供了一个示例代码: public static void Foo(string body, string caption = "", int x = 0) 我在一个有两个重载的类中有一个静态函数.除了一个或两个参数外,两个重载都完全相同. 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){}
总结

以上是内存溢出为你收集整理的c# – 如何调用具有可选参数的重载方法而没有编译器的歧义?全部内容,希望文章能够帮你解决c# – 如何调用具有可选参数的重载方法而没有编译器的歧义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1221893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存