Ich bin ziemlich ratlos damit, wenn jemand irgendwelche Ideen hat. Ich habe die generische MethodeGenerische Constraints zur Laufzeit hinzufügen?
public void Foo<TClass>(TClass item) where TClass : class
{ }
Und ich mag diese Methode von einer anderen generischen Methode nennen, aber diese generische Methode nicht die Typeinschränkung „wo TClass: Klasse“
public void Bar<T>(T item)
{
this.Foo<T>(item);
}
Diese doesn ‚t Arbeit, erhalte ich die Fehler
‚Der Typ ‚T‘ ist ein Referenztyp sein, um es zu benutzen als Parameter ‚TClass‘‘
Was ich verstehe. Aber meine Frage ist das - kann ich irgendetwas mit der C# -Syntax machen, um den generischen Typ "T" zu "filtern", um ihn an "this.Bar" zu übergeben, wenn es eine Klasse ist. So etwas ....
public void Bar<T>(T item)
{
if (typeof(T).IsClass)
this.Foo<T **as class**>();
}
Ich weiß, ich Reflektion verwenden könnte Foo zu nennen, aber dies scheint nur, wie Betrug. Kann ich etwas mit C# machen, um "T" zur Laufzeit mit der Einschränkung zu übergeben?
auch - Ich kann nicht die Einschränkung für die Methode „Bar“ ändern, da es von einer Schnittstelle kommt so die Einschränkung der Beschränkung auf der Schnittstelle zu entsprechen hat
Meinten Sie "this.Foo();" ? –
Euphoric
gut entdeckt - bearbeitet :) – jcharlesworthuk
Also warum benutzt du 'if (typeof (T) .IsClass)' ?? –