estoy escribiendo .NET On-the-Fly compilador para scripting CLR y quiere hacer método de ejecución aceptable genérica:operador como y clases genéricas
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
}
Pero creo operador as
será muy útil: si el tipo de resultado no es T
método ¡devolverá null
, en lugar de una excepción! Es posible de hacer?
Muchas gracias por su respuesta. Lo usaré, verificaré y marcaré como respuesta. Y, a continuación, uso mi código: MyClass c = compiler.Execute(); Creo que es mejor que MyClass c = compiler.Execute() como MyClass; (Comprobar dentro es mejor que afuera, supongo) –
abatishchev
¡Pero el cheque aún se necesita fuera, el cheque de nulo! :) Al hacer que el usuario escriba 'como MyClass', deja más claro que se requiere la verificación de null. –
Hm .. ¡Parece que tienes razón! Recomendaré usar Execute() "normal", pero para el usuario final podría ser útil tener dicho Execute() "anormal", además de "experimento genérico" de alguna manera :) – abatishchev