7

リフレクションを介して匿名メソッドをどのように識別できますか?

4

3 に答える 3

9

メソッドの属性を調べて、メソッドがCompilerGeneratedAttributeで装飾されているかどうかを確認します。

匿名メソッド(および自動実装プロパティなどの他のオブジェクト)には、この属性が追加されます。


たとえば、クラスの型があるとします。匿名メソッドは次のようになります。

Type myClassType = typeof(MyClass);
IEnumerable<MethodInfo> anonymousMethods = myClassType
    .GetMethods(
          BindingFlags.NonPublic
        | BindingFlags.Public 
        | BindingFlags.Instance 
        | BindingFlags.Static)
    .Where(method => 
          method.GetCustomAttributes(typeof(CompilerGeneratedAttribute)).Any());

これにより、で定義された匿名メソッドが返されMyClassます。

于 2010-03-23T20:27:47.943 に答える
9

ILレベルには匿名のメソッドなどがないため、できません。これらはすべて名前が付けられており、すべて名前付きタイプに属しています。また、C#およびVBコンパイラが匿名メソッドを名前付きメソッドおよび型に変換する方法は完全に実装定義であり、信頼することはできません(つまり、マイナーリリース/ホットフィックスであっても、更新によって変更される可能性があります)。

于 2010-03-23T20:38:44.427 に答える
5

私が見ることができることから、その正規表現パターンは次のようになります。

<(\w|_)+>b_.+
于 2010-03-23T20:37:01.260 に答える