【发布时间】:2017-06-21 10:26:44
【问题描述】:
这里我有一个简单的场景,有两种方法,我从彼此那里得到一个模棱两可的调用:
这是我的代码:
public IEnumerable<JobsViewModel> GetJobsViewModels(Guid vesselId, int status, Func<JobsNoSubsYpdcResult, bool> predicate = null)
=> predicate == null
? Mapper.Map<IEnumerable<JobsViewModel>>(_procedureService.Tech_GetJobsNoSubsYPDC(vesselId, status))
: Mapper.Map<IEnumerable<JobsViewModel>>(_procedureService.Tech_GetJobsNoSubsYPDC(vesselId, status).Where(predicate));
public IEnumerable<JobsViewModel> GetJobsViewModels(Guid vesselId, int status, Func<JobsViewModel, bool> predicate = null)
=> predicate == null
? GetJobsViewModels(vesselId, status)
: GetJobsViewModels(vesselId, status).Where(predicate);
我不喜欢更改方法的名称,但从第二个开始我收到错误消息:
模棱两可的调用
我想像我想要做的那样从第二个调用第一个,有人知道我怎样才能在不更改方法名称的情况下做到这一点,否则我应该更改它们?
【问题讨论】:
-
请显示给您该错误的调用。
-
@LasseV.Karlsen:我认为它已经存在了。第二个表达式的主体包含对所描述方法的调用。
-
如果跳过可选参数,这两种方法完全一样,编译器应该怎么知道?
-
或者,如果您省略它,您可以简单地删除您不希望它调用的重载的默认值,可能是第二个。换句话说,只有在您实际指定委托时才可调用第二个重载。
-
Lasse 非常到位。没有谓词,第二个重载只会转发到第一个重载 - 所以真的没有必要在没有谓词的情况下调用第二个,所以它不需要默认值。
标签: c# overloading