Общий метод с несколькими ограничениями
У меня есть общий метод, который имеет два общих параметра. Я попытался скомпилировать код ниже, но он не работает. Это ограничение .NET? Возможно ли иметь несколько ограничений для разных параметров?
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, TResponse : MyOtherClass
Ответы
Ответ 1
Это можно сделать, вы просто немного ошиблись в синтаксисе. Вам нужно where
для каждого ограничения, а не разделять их запятой:
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass
where TResponse : MyOtherClass
Ответ 2
В дополнение к основному ответу @LukeH, у меня есть проблема с внедрением зависимостей, и мне потребовалось некоторое время, чтобы это исправить. Стоит поделиться, для тех, кто сталкивается с такой же проблемой:
public interface IBaseSupervisor<TEntity, TViewModel>
where TEntity : class
where TViewModel : class
Это решается таким образом. в контейнерах/сервисах ключ typeof и запятая (,)
services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));
Это было упомянуто в этом ответе.
Ответ 3
В дополнение к основному ответу @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