、私はジェネリックデリゲートを生成するための方法を探しています元の質問です:ここでは .Net generate generic methods.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方法は、第三パラメータが必要です...パラメータの説明は言う:
最初の引数、またはデリゲート がバインドされているオブジェクトである必要があります。
私はそこに「obj」と「this」とnullを入れようとしましたが、無効な引数例外が常に発生します。
アイデア?
コンパクトプラットフォーム上の他の2つの引数に何か問題がありますか? –
私はデスクトップの.NET上でこのように3つの引数を使って全く同じことを試しましたが、それはうまくいきました:Delegate delegate_ = Delegate.CreateDelegate(eventInfo.EventHandlerType、this、genericPropertyChangedMethodInfo); –
私は近くに見え、エラーは言った: "オープンジェネリックメソッドのReturnTypeはサポートされていません" ... hmmm –