1

dotnet 2.0 を使用しています

EventInfo 値を使用すると、アセンブリの型をループして、EventInfo デリゲート定義 ( EventInfo.EventHandlerType ) に一致するすべてのメソッドを見つけることができることを知っています。

最初にすべての参照アセンブリをループしてすべてのデリゲート定義を見つけることなく、特定の MethodInfo を Delegate.CreateDelegate() 関数で割り当てることができる利用可能なデリゲートを見つける方法はありますか?

または、私は次のことをしている:

public bool MethodInfoDelegateSearch( MethodInfo mi ) {
  System.Collections.Generic.List<Type> delegateTypes = new System.Collections.Generic.List<Type>();
  foreach ( Assembly a in AppDomain.CurrentDomain.GetAssemblies() )
    foreach ( Type t in a.GetTypes() ) {
      if ( t.IsSubclassOf( typeof( Delegate ) ) )
        delegateTypes.Add( t );
    }

  for ( int i = 0; i < delegateTypes.Count; i++ ) {
    Type t = delegateTypes[i];
    /*
     * here is where to attempt match the delegate structure to the MethodInfo
     * I can compare parameters or just attempt to create the delegate
     */
    try {
      Delegate.CreateDelegate( t, mi, true );
      return true;
    } catch {
    }
  }
  return false;
}
4

1 に答える 1

0

すべてをループする必要があるように思えます。あなたは、機能するすべての「利用可能な」デリゲートを見つけたいと言います。デリゲートを受け入れる関数には、渡すことができるメソッドへのリンクがないため、それらすべてを見つけるには大規模な検索が唯一の方法です。

パブリック/内部アクセスを持つ型のみをチェックすることで、検索に費やす時間を短縮できます。

于 2010-10-07T21:03:10.087 に答える