Ecco la domanda iniziale in cui sto cercando un modo per generare un delegato generico: .Net generate generic methods.NET generare metodo generico - compact framework
Ecco il codice per generare un delegato generico nel .NET 3.5:
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)
{
}
questo funziona in .NET 3.5, ma ora quando ho cercato di porta per il compact framework 3.5, il metodo Delegate.CreateDelegate richiede un terzo parametro ... la descrizione dei parametri dice:
dovrebbe essere il primo argomento, o "l'oggetto al quale è associato il delegato ".
Ho provato a mettere 'obj' in là, e 'this', e null, e ottengo sempre un'eccezione di argomento non valido.
Qualche idea?
Potrebbe essere che ci sia qualcosa di sbagliato con gli altri due argomenti sulla piattaforma compatta? –
Ho provato la stessa identica cosa con tre argomenti come questo sul desktop .NET e ha funzionato: Delegato delegate_ = Delegate.CreateDelegate (eventInfo.EventHandlerType, this, genericPropertyChangedMethodInfo); –
Ho guardato più da vicino e l'errore ha detto: "ReturnType per i metodi Open Generic non è supportato" ... hmmm –