2010-03-23 49 views

回答

7

看看方法的屬性,看看方法是否用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上定義的任何匿名方法。

+0

所以可以使用其他方法(或成員/類型)。 – leppie 2010-03-23 20:31:25

+0

正確 - 你可以在任何方法上手動定義它,並欺騙它,但通常這是用於匿名方法和其他編譯器生成的信息。 – 2010-03-23 20:37:22

+0

對於汽車屬性,以及屬性獲取者和設置者。 – leppie 2010-03-23 20:39:24

4

從我所看到的,正則表達式是:

<(\w|_)+>b_.+ 
7

你不能,因爲沒有這樣的東西作爲對IL水平匿名方法 - 他們都被點名了,都屬於命名類型。而且C#和VB編譯器將匿名方法轉換爲命名方法和類型的方式完全是實現定義的,並且不能被依賴(這意味着它可以隨着任何更新而改變,即使在次要版本/修補程序中也是如此)。

+3

+1:這在技術上是「正確」的答案 - 但[編譯器生成]在實踐中運行相當可靠。 – 2010-03-23 20:44:38