2016-05-22 10 views
-1

Ich habe die folgende Methode:C# - Guss Instanz generische Schnittstelle null zurück

IResponseToModelConverter<U, IEntity> CreateConverter() 
{ 
return new ResponseToItemConverter() as IResponseToModelConverter<U, IEntity>; 
} 

ResponseToItemConverter erbt von einer Basisklasse, die IResponseToModelConverter implementiert. Item ist ein Typ von IEntity, und ich kann den Typ U bekommen. Gibt es dafür einen Weg?

+0

Wenn der ResponseToItemConverter diese Schnittstelle nicht direkt implementiert dann nein, können Sie nicht. In C# gibt es keine Ente. –

+0

Es erbt von einer Basisklasse, die die Schnittstelle implementiert. Ich habe vergessen, das zu erwähnen. – user6251216

+0

Es wird nur einen Nicht-Null-Wert zurückgegeben, wenn entweder 'U' ein konkreter Typ ist und 'ResponseToItemConverter' die Schnittstelle 'IResponseToModelConverter ' implementiert oder wenn das generische Argument 'U' als übergeben wird Geben Sie ein, für welche Klasse die gleiche Schnittstelle implementiert wird. –

Antwort

0

I IEntity mit Typ-Parameter T (mit IEntity Einschränkung) ersetzt, so kann ich eine konkrete Klasse übergeben, wenn ich in die Schnittstelle umgewandelt. Das hat mein Problem gelöst.

0

Sind Sie sicher, dass die Typen, die Sie zu transformieren versuchen, die Kovarianz unterstützen? Es ist mir in der Vergangenheit passiert, dass ich versuchte, einen kovarianten Typ zu erzeugen, und es gab mir einige Probleme, wenn ich den Code ausführte.

Werfen Sie einen Blick auf diese: https://msdn.microsoft.com/en-us/library/mt654055.aspx

Verwandte Themen