Устраняет ли компилятор во всех ограничениях типа типа при разрешении перегрузок?
blockquote>Нет, поскольку общие ограничения не являются частью сигнатуры функции. Вы можете проверить это, добавив перегрузку
Bar
, которая идентична, за исключением общих ограничений:interface IBar { } static void Bar<T>(IEnumerable<T> value) where T : IFoo { } static void Bar<T>(T source) where T : IBar { // fails to compile : Type ____ already defines a member called 'Bar' with the same parameter types }
Причина, по которой ваш код не компилируется, заключается в том, что компилятор выбирает «лучшее» соответствие на основе сигнатура метода , тогда пытается применить общие ограничения.
Одна из возможных причин, по которым это не , состоит в том, что этот вызов будет неоднозначным:
{предположим, что
List<T>
имеет методAdd<T>(IEnumerable<T> source
)}List<object> junk = new List<object>(); junk.Add(1); // OK junk.Add("xyzzy") // OK junk.Add(new [] {1, 2, 3, 4}); //ambiguous - do you intend to add the _array_ or the _contents_ of the array?
Очевидное исправление заключается в использовании другого имени для метода
Bar
, который принимает коллекцию (as выполняется в BCL сAdd
иAddRange
.
Хорошо, разобрались с теми, кто может застрять с этой ошибкой. В конце концов, это никак не связано с моим NGiNX или конфигурацией докера. В моем конструкторе для моего контроллера я читал значение конфигурации, которого не было. Это вызвало исключение, из-за которого мой метод никогда не вызывался.
Таким образом, для любого, кто испытывает «Заявление выполнено без чтения всего тела запроса ...», вы можете проверить свои конструкторы на наличие проблем.