Ich schreibe .NET On-the-Fly Compiler für CLR-Scripting und wollen Hinrichtungsmethode machen generic akzeptabel:Operator wie und generische Klassen
object Execute()
{
return type.InvokeMember(..);
}
T Execute<T>()
{
return Execute() as T; /* doesn't work:
The type parameter 'T' cannot be used with the 'as' operator because
it does not have a class type constraint nor a 'class' constraint */
// also neither typeof(T) not T.GetType(), so on are possible
return (T) Execute(); // ok
}
Aber ich denke, Operator as
wird sehr nützlich sein: Wenn Ergebnistyp nicht T
Methode ist gibt null
statt einer Ausnahme zurück! Ist es möglich zu tun?
Vielen Dank für Ihre Antwort. Ich werde es benutzen, überprüfen und als Antwort markieren. Und ich habe als nächstes meine Code-Verwendung: MyClass c = compiler.Execute(); Ich denke, es ist besser als MyClass c = compiler.Execute() als MyClass; (check drinnen ist besser als draussen, schätze ich) –
abatishchev
Aber der Check wird noch draußen gebraucht - der Check für null! :) Indem Sie den Benutzer dazu bringen, 'als MyClass' zu schreiben, verdeutlichen Sie, dass die Überprüfung auf Null erforderlich ist. –
Hm .. Es scheint, dass Sie Recht haben! Ich empfehle, 'normal' Execute() zu verwenden, aber für den Endbenutzer könnte es hilfreich sein, solche 'abnormalen' Execute(), zusätzlich 'generische Experimente' irgendwie zu haben :) – abatishchev