¿Cómo puedo encontrar todos los métodos de extensión en solución?¿Cómo puedo encontrar todos los métodos de extensión en solución?
Respuesta
Si yo estuviera haciendo me gustaría buscar todos los archivos de la cadena "(este" - la cadena de búsqueda puede variar en función de las opciones de formato
EDITAR: Después de un poco de experimentación, el. siguiendo parece funcionar para mí con alta precisión utilizando "Buscar en archivos" (Ctrl-Shift-F)
- Buscar cadena: "
\(this [A-Za-z]
" (sin las comillas, claro) caso - partido: sin marcar
- palabras completas: Desactivada
- Uso: Las expresiones regulares
- mira a estos tipos de archivos: "* .cs"
hacer lo que desea comprobar el código fuente (sólo tiene que buscar en los archivos de (this ...
) o su programa en ejecución por reflexión (en este caso, esta discusión this puede ayudarlo)?
Sí. No se olvide de espacios en blanco y saltos entre el corchete y 'esto' –
Tal vez el código en este artículo acerca de how to find extension methods targeting object podría ser utilizado? Podría, por ejemplo, reescribirse ligeramente y usarlo para volcar todos los métodos de extensión en lugar de solo los que apuntan a object
.
Búsqueda amplia de texto de la solución con una expresión regular que coincida con su estilo de codificación. Algo así como "(*this +"
(se agregó el primer espacio opcional para obtener algunos errores de tolerancia).
Me gustaría ver los ensamblados generados mediante el reflejo; iterar a través de los tipos estáticos en busca de métodos con [ExtensionAttribute]
...
static void ShowExtensionMethods(Assembly assembly)
{
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass && !type.IsGenericTypeDefinition
&& type.BaseType == typeof(object)
&& type.GetConstructors().Length == 0)
{
foreach (MethodInfo method in type.GetMethods(
BindingFlags.Static |
BindingFlags.Public | BindingFlags.NonPublic))
{
ParameterInfo[] args;
if ((args = method.GetParameters()).Length > 0 &&
HasAttribute(method,
"System.Runtime.CompilerServices.ExtensionAttribute"))
{
Console.WriteLine(type.FullName + "." + method.Name);
Console.WriteLine("\tthis " + args[0].ParameterType.Name
+ " " + args[0].Name);
for (int i = 1; i < args.Length; i++)
{
Console.WriteLine("\t" + args[i].ParameterType.Name
+ " " + args[i].Name);
}
}
}
}
}
}
static bool HasAttribute(MethodInfo method, string fullName)
{
foreach(Attribute attrib in method.GetCustomAttributes(false))
{
if (attrib.GetType().FullName == fullName) return true;
}
return false;
}
Solo para agregar, puede ser cualquier atributo llamado ExtensionAttribute, no debe ser del mismo tipo que el suministrado en System.Code.dll. Esto le permite usar esta característica mientras apunta a .NET 2. – leppie
True; de hecho, I ' he usado varios - en LINQBridge y MiscUtil entre otros ... Lo actualizaré ... –
No necesita ese espacio de nombres tampoco :) Cualquier atributo llamado ExtensionAttribute funcionará. – leppie
- 1. ¿Cómo encontrar todos los archivos con cierta extensión en Android?
- 2. ¿Encontrar todos los archivos con cierta extensión en Unix?
- 3. ¿Cómo encontrar todos los métodos anulando los métodos de superclase/interfaz sin la anotación @Override?
- 4. ¿Cómo puedo encontrar todos los métodos que llaman a un método determinado en Java?
- 5. ¿Cómo puedo obtener todos los métodos en un protocolo?
- 6. ¿Los métodos LINQ son métodos de extensión?
- 7. ¿Cómo agrupar los métodos de extensión?
- 8. Cómo se conectan los métodos de extensión
- 9. ¿Cómo se compilan los métodos de extensión?
- 10. Reemplazando los métodos de extensión
- 11. ¿Cómo puedo encontrar todos los productos sin imágenes en Magento?
- 12. ¿Cómo puedo encontrar todos los disparadores db en MYSQL?
- 13. ¿Cómo colapsar todos los métodos en XCode?
- 14. ¿Cómo puedo crear métodos de extensión .Net por C++/CLI?
- 15. registrar todos los métodos?
- 16. ¿Cómo encontrar todas las referencias en una solución (por lo tanto, de todos los proyectos)?
- 17. ¿Cómo puedo ocultar los métodos en F #?
- 18. ¿Cuándo deberían evitarse los métodos de extensión?
- 19. ¿Los métodos de extensión ocultan las dependencias?
- 20. En PostGIS, ¿cómo puedo encontrar todos los puntos dentro de un polígono?
- 21. ¿Puedo obtener todos los métodos de una clase?
- 22. ¿Qué son los métodos de extensión?
- 23. ¿Cómo puedo iterar sobre una colección y cambiar los valores con los métodos de extensión LINQ?
- 24. ¿Cómo extiendo una clase con los métodos de extensión C#?
- 25. ¿Cómo puedo ignorar todos los archivos excepto los que tienen cierta extensión en git?
- 26. python - encontrar char en cadena - ¿puedo obtener todos los índices?
- 27. ¿Cómo encontrar métodos simples particulares
- 28. Encontrar todos los controladores en la aplicación
- 29. ¿Puedo usar métodos de extensión para implementar una interfaz?
- 30. ¿Cómo enumero programáticamente todos los proyectos en una solución?
"este" se pasa a menudo como argumento - supongo que lo que se necesita para que coincida con el patrón "(este nombre de tipo", seguido de " , "o") ", y con cualquier cantidad de espacios en blanco en el medio. No es una simple expresión regular (ni siquiera lo intenté ...) –
Sí, pero en mi formateo sería "(esto,", no "(esto", por lo que no coincidiría. – tvanfosson
... excepto cuando es el único argumento, así que tal vez una expresión regular con "(esto [A-Za-z]", aunque solo lo ejecuté en una de mis soluciones y solo encontré 3 ejemplos pasados como argumento y aproximadamente 50 métodos de extensión (lotes) de extensiones HtmlHelper para MVC). – tvanfosson