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# – 如何调用具有可选参数的重载方法而没有编译器的歧义?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)