Generische Methode mit mehreren Einschränkungen

251

Ich habe eine generische Methode, die zwei generische Parameter hat. Ich habe versucht, den folgenden Code zu kompilieren, aber es funktioniert nicht. Ist es eine .NET-Einschränkung? Ist es möglich, mehrere Einschränkungen für verschiedene Parameter zu haben?

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

Antworten:

402

Es ist möglich, dies zu tun, Sie haben gerade die Syntax etwas falsch. Sie benötigen wherefür jede Einschränkung ein, anstatt sie durch ein Komma zu trennen:

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

Zusätzlich zur Hauptantwort von @LukeH mit einer anderen Verwendung können wir mehrere Schnittstellen anstelle der Klasse verwenden. (Eine Klasse und n Anzahl Schnittstellen) wie folgt

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

oder

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : IMyClass,IMyOtherClass
Hamit YILDIRIM
quelle
1

Zusätzlich zur Hauptantwort von @LukeH habe ich ein Problem mit der Abhängigkeitsinjektion, und ich habe einige Zeit gebraucht, um dies zu beheben. Es lohnt sich zu teilen, für diejenigen, die das gleiche Problem haben:

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

Es ist auf diese Weise gelöst. In Containern / Diensten ist der Schlüssel typeof und das Komma (,)

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

Dies wurde in dieser Antwort erwähnt .

Maytham-ɯɐɥʇʎɐɯ
quelle
2
Diese Antwort bezieht sich überhaupt nicht auf Typeinschränkungen. Es geht um ungebundene generische Typen und wie man sie in C # buchstabiert. stackoverflow.com/a/2173115/2157640 stackoverflow.com/a/6607299/2157640
Palec