Estoy tratando de pasar un tipo de delegado como un parámetro de tipo para que pueda usarlo como un parámetro de tipo más adelante en el código, así:Pasar un delegado como un parámetro de tipo y usarlo arroja el error CS0314
// Definition
private static class Register
{
public static FunctionObject Create<T>(CSharp.Context c, T func)
{
return new IronJS.HostFunction<T>(c.Environment, func, null);
}
}
// Usage
Register.Create<Func<string, IronJS.CommonObject>>(c, this.Require);
sin embargo, el compilador de C# se queja:
The type 'T' cannot be used as type parameter 'a' in the generic type or method
'IronJS.HostFunction<a>'. There is no boxing conversion or type parameter
conversion from 'T' to 'System.Delegate'."
he tratado de solucionar este problema añadiendo "donde T: System.Delegate" a la función, sin embargo, no se puede utilizar como System.Delegate una restricción en los parámetros de tipo:
Constraint cannot be special class 'System.Delegate'
¿Alguien sabe cómo resolver este conflicto?
no funciona (argumento y retorna información de tipo se pierde durante molde):
Delegate d = (Delegate)(object)(T)func;
return new IronJS.HostFunction<Delegate>(c.Environment, d, null);
¿Por qué su solución contiene un '(T)'? – Gabe
@Gabe: Fue el tipo que se pasa en Crear. Lamentablemente, la solución propuesta no funciona en tiempo de ejecución. –
¿Puede mostrar el código de la solución propuesta que no funciona y explicar cómo no funciona? – Gabe