首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二义性方法调用c#

二义性方法调用c#
EN

Stack Overflow用户
提问于 2018-12-06 11:34:11
回答 1查看 303关注 0票数 1

有谁能解释一下为什么这些方法:

代码语言:javascript
复制
public IEnumerable<Role> GetRoles(Func<Role, bool> predicate = null)
public IEnumerable<Role> GetRoles(params User[] users)

如果我调用GetRoles(null),它将不会编译,因为方法调用是模棱两可的,这是正确的,但是如果我调用GetRoles(),这是合法的,并选择了public IEnumerable<Role> GetRoles(Func<Role, bool> predicate = null)方法。为甚麽这也不含糊呢?

EN

回答 1

Stack Overflow用户

发布于 2018-12-06 11:36:51

这是因为这两个参数都是空的,因此这两个方法都可以将一个null值作为输入,因此无法区分它们。

编译器不知道null应该是Func<Role, bool>还是User[] users,并且没有足够的信息来对要调用的方法做出任何假设。

您可以如下所示向编译器提供更多信息:

代码语言:javascript
复制
Func<Role, bool> predicate = null;
GetRoles(predicate); // calls --> GetRoles(Func<Role, bool> predicate = null)

至于另一种方法:

代码语言:javascript
复制
User[] users = null;
GetRoles(users); // calls GetRoles(params User[] users)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53650530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档