Hier ist die ursprüngliche Frage, wo ich nach einer Möglichkeit, ein generischen Delegaten zu generieren: .Net generate generic methods.NET generische Methode erzeugen - Compact Framework
Hier ist der Code ist ein generischen Delegaten in .NET 3.5 zu generieren:
public delegate void PropertyChangedDelegate<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue);
EventInfo eventInfo = type.GetEvent(property.Name + "Changed");
MethodInfo propertyChangedMethodInfo = this.GetType().GetMethod("content_PropertyChanged", BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo genericPropertyChangedMethodInfo = propertyChangedMethodInfo.MakeGenericMethod(eventInfo.EventHandlerType.GetGenericArguments());
Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType, genericPropertyChangedMethodInfo);
eventInfo.AddEventHandler(obj, delegate_);
void content_PropertyChanged<OwnerType, PropertyType>(OwnerType sender, String propertyName, PropertyType oldValue, PropertyType newValue)
{
}
Dies funktioniert in .NET 3.5, aber jetzt, wenn ich in den Hafen der kompakten Rahmen versucht, 3.5, erfordert die Delegate.CreateDelegate Verfahren einen dritten Parameter ... die Parameter Beschreibung sagt:
Es sollte das erste Argument sein, oder 'das Objekt, an das der Delegat gebunden ist'.
Ich habe versucht, 'obj' dort, und 'das' und null, und ich bekomme immer eine ungültige Argument Ausnahme.
Irgendwelche Ideen?
Könnte es sein, dass etwas mit den anderen beiden Argumenten auf der kompakten Plattform nicht stimmt? –
Ich versuchte genau das gleiche mit drei Argumente wie diese auf dem Desktop .NET und es funktionierte: Delegate delegate_ = Delegate.CreateDelegate (eventInfo.EventHandlerType, this, genericPropertyChangedMethodInfo); –
Ich schaute näher und der Fehler sagte: "ReturnType für Open generische Methoden wird nicht unterstützt" ... hmmm –