¿Cómo se pueden identificar métodos anónimos a través de la reflexión?Cómo identificar métodos anónimos en System.Reflection
Respuesta
Observe los atributos del método y vea si el método está decorado con CompilerGeneratedAttribute.
Los métodos anónimos (así como otros objetos, como las propiedades implementadas automáticamente, etc.) tendrán este atributo agregado.
Por ejemplo, supongamos que tiene un tipo para su clase. Los métodos anónimos estarán en:
Type myClassType = typeof(MyClass);
IEnumerable<MethodInfo> anonymousMethods = myClassType
.GetMethods(
BindingFlags.NonPublic
| BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.Static)
.Where(method =>
method.GetCustomAttributes(typeof(CompilerGeneratedAttribute)).Any());
Esto debería devolver cualquiera de los métodos anónimos definidos en MyClass
.
Y también cualquier otro método (o miembro/tipo). – leppie
Es cierto: puede definir esto manualmente en cualquier método y engañarlo, pero normalmente se usa para métodos anónimos y otra información generada por el compilador. –
Para propiedades automáticas también, y en getters y setters de propiedades. – leppie
Por lo que puedo ver, que el patrón de expresión regular sería:
<(\w|_)+>b_.+
No se puede, porque no hay tal cosa como un método anónimo en el nivel de IL - todos son nombrados, y todos pertenecen a tipos nombrados Y la forma en que los compiladores C# y VB traducen los métodos anónimos a métodos y tipos específicos está completamente definida por la implementación y no se puede confiar (lo que significa que, por ejemplo, puede cambiar con cualquier actualización, incluso en revisiones/revisiones menores).
+1: Esta es, técnicamente, la respuesta "correcta", pero [CompilerGenerated] funciona con bastante fiabilidad en la práctica. –
- 1. BackgroundWorker con métodos anónimos?
- 2. Usando MethodInfo.GetCurrentMethod() en métodos anónimos
- 3. Métodos y delegados anónimos
- 4. Generando IL para métodos anónimos
- 5. Expresión Lambda versus métodos anónimos
- 6. ¿Qué son los métodos anónimos en C#?
- 7. System.Reflection vs Generics - performance
- 8. System.Reflection: los métodos globales no están disponibles para la reflexión
- 9. RemoveHandler y métodos anónimos de VB.NET
- 10. Cómo configurar Code Formatter for Java Métodos anónimos en Eclipse
- 11. ¿Cómo evitar métodos anónimos en la suscripción de eventos "dinámicos"?
- 12. ¿Es posible identificar métodos alias en Ruby?
- 13. C# 2.0 Threading de interrogación (métodos anónimos)
- 14. métodos anónimos, el alcance y la serialización
- 15. Interfaces, métodos anónimos y fugas de memoria
- 16. ¿Alguien me puede explicar métodos anónimos?
- 17. ParaCada de LINQ con métodos anónimos en VB.NET
- 18. ¿Hay alguna sobrecarga en el uso de métodos anónimos?
- 19. Extraño error con métodos anónimos en la sección 'inicialización'
- 20. LINQ vs Lambda vs Métodos anónimos vs Delegados
- 21. Configuración de ReSharper para sangría de métodos anónimos?
- 22. diferencia entre las expresiones lambda y métodos anónimos - C#
- 23. La confusión acerca de los métodos anónimos parámetros
- 24. using System.Reflection obtener un método Nombre completo
- 25. ¿Cómo acceder a miembros internos a través de System.Reflection?
- 26. tipos anónimos
- 27. delegados anónimos en C#
- 28. ¿Colecciones de tipos anónimos?
- 29. ¿Qué problemas hay utilizando los métodos genéricos y anónimos en Delphi 2009?
- 30. ¿Cómo identificar cuándo cambió SIM en iPhone?
¿Podría decir algo más sobre lo que quiere lograr? –