Общий метод с несколькими ограничениями
У меня есть общий метод с двумя универсальными параметрами. Я попытался скомпилировать приведенный ниже код, но он не работает. Это ограничение .NET? Возможно ли иметь несколько ограничений для разных параметров?
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, TResponse : MyOtherClass
Ответов (4)4
Это возможно, просто у вас немного неправильный синтаксис. Вам нужно where
для каждого ограничения, а не разделять их запятой:
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass
where TResponse : MyOtherClass
В дополнение к основному ответу @LukeH у меня проблема с внедрением зависимостей, и мне потребовалось некоторое время, чтобы исправить это. Тем, кто сталкивается с подобной проблемой, стоит поделиться:
public interface IBaseSupervisor<TEntity, TViewModel>
where TEntity : class
where TViewModel : class
Решается это так. в контейнерах / сервисах ключ - это typeof и запятая (,)
services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));
Об этом упоминалось в этом ответе .
В дополнение к основному ответу @LukeH с другим использованием мы можем использовать несколько интерфейсов вместо класса. (Один класс и n интерфейсов счетчика), как это
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, IMyOtherClass, IMyAnotherClass
или
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : IMyClass,IMyOtherClass