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 } >还有其他解决方法可以解决这个问题吗? 编辑: >我无法重命名这两个功能. 解决方法
添加一个单独的重载来处理具有一个或两个参数的案例.
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) { } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |