Metodo generico con più vincoli


251

Ho un metodo generico che ha due parametri generici. Ho provato a compilare il codice qui sotto ma non funziona. È una limitazione .NET? È possibile avere più vincoli per diversi parametri?

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

Risposte:


402

È possibile farlo, hai appena sbagliato la sintassi. È necessario un whereper ogni vincolo anziché separarli con una virgola:

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

8

Oltre alla risposta principale di @LukeH con un altro utilizzo, possiamo usare più interfacce invece della classe. (Interfacce di una classe e n conteggi) come questa

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

o

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

1

Oltre alla risposta principale di @LukeH, ho problemi con l'iniezione di dipendenza e mi ci è voluto del tempo per risolvere questo problema. Vale la pena condividere, per coloro che affrontano lo stesso problema:

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

È risolto in questo modo. in container / servizi la chiave è typeof e la virgola (,)

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

Questo è stato menzionato in questa risposta .


2
Questa risposta non è affatto correlata ai vincoli di tipo. Riguarda i tipi generici non associati e come spiegarli in C #. stackoverflow.com/a/2173115/2157640 stackoverflow.com/a/6607299/2157640
Palec
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.