web-dev-qa-db-fra.com

Méthode générique à contraintes multiples

J'ai une méthode générique qui a deux paramètres génériques. J'ai essayé de compiler le code ci-dessous mais cela ne fonctionne pas. Est-ce une limitation .NET? Est-il possible d'avoir plusieurs contraintes pour différents paramètres?

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, TResponse : MyOtherClass
222
Martin

C'est possible, la syntaxe est légèrement fausse. Vous avez besoin de where pour chaque contrainte plutôt que de les séparer par une virgule:

public TResponse Call<TResponse, TRequest>(TRequest request)
    where TRequest : MyClass
    where TResponse : MyOtherClass
357
LukeH

En plus de la réponse principale de @LukeH avec un autre usage, nous pouvons utiliser plusieurs interfaces au lieu de classe. (Une classe et n nombre d'interfaces) comme ceci

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, IMyOtherClass, IMyAnotherClass

ou

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : IMyClass,IMyOtherClass
1
marven

En plus de la réponse principale de @LukeH, j'ai un problème avec l'injection de dépendance et il m'a fallu du temps pour résoudre ce problème. Il convient de partager, pour ceux qui font face au même problème:

public interface IBaseSupervisor<TEntity, TViewModel> 
    where TEntity : class
    where TViewModel : class

C'est résolu de cette façon. dans les conteneurs/services, la clé est typeof et la virgule (,)

services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));

Ceci a été mentionné dans cette réponse .

0