Я пытаюсь передать тип делегата в качестве параметра типа, чтобы затем использовать его в качестве параметра типа позже в коде, например так:
// 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);
Однако компилятор C # жалуется:
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'."
Я попытался исправить это, добавив "where T: System.Delegate" к функции, однако вы не можете использовать System.Delegate в качестве ограничения параметров типа:
Constraint cannot be special class 'System.Delegate'
Кто-нибудь знает, как разрешить этот конфликт?
НЕ РАБОТАЕТ (информация об аргументах и типах возвращаемых данных теряется во время приведения):
Delegate d = (Delegate)(object)(T)func;
return new IronJS.HostFunction<Delegate>(c.Environment, d, null);