Недавно мы перешли от VS2013 к VS2017 в нашу компанию. После обновления наша кодовая база больше не будет строить. Мы получили бы следующую ошибку:
Вызов неоднозначен между следующими методами или свойствами: 'IRepository <T> .Get(объект, params Expression < Func < T, object → [])' и 'IRepository <T> .Get(object, params строка []) '
Вот сам вызов:
this.mainRepository.Get(newEntity.Id);
... и определение интерфейса:
public interface IRepository<T> where T : class
{
T Get(object id, params Expression<Func<T, object>>[] includeExprs);
T Get(object id, params string[] includeExprs);
}
Мне было интересно, может ли кто-нибудь объяснить, почему это так. Я подозреваю, что новая улучшенная функция перегрузки метода С# 6.0, но, глядя на спецификацию языка, я не смог узнать точное правило, ответственное за проблему.
ИЗМЕНИТЬ
Я написал следующее сообщение в блоге об этой проблеме: http://codewithstyle.info/method-overload-resolution-in-c-6-0-an-interesting-bug-story