ジェネリックデリゲートを生成する方法を探している元の質問は次のとおりです 。.Netジェネリックメソッドを生成します
.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)
{
}
これは .NET 3.5 で機能しますが、コンパクト フレームワーク 3.5 に移植しようとすると、Delegate.CreateDelegate メソッドには 3 番目のパラメーターが必要です...パラメーターの説明には次のように記載されています。
最初の引数、または「デリゲートがバインドされているオブジェクト」である必要があります。
そこに「obj」、「this」、およびnullを入れてみましたが、常に無効な引数の例外が発生します。
何か案は?