Wie finde ich alle Erweiterungsmethoden in Lösung?Wie finde ich alle Erweiterungsmethoden in Lösung?
Antwort
Wenn ich es tat, würde ich alle Dateien für die Zeichenfolge „(diese“ suchen - Ihr Suchbegriff unterscheiden kann auf der Grundlage Ihrer Formatierungsoptionen
EDIT: Nach einem wenig Experimentieren, das. folgende scheint für mich mit hohen Präzision mit "Find in Files" (Ctrl-Shift-F)
- Suchbegriff zu arbeiten: "
\(this [A-Za-z]
" (minus Anführungszeichen, natürlich) - Spiel Fall: nicht angehakt
- ganzes Wort: nicht angehakt
- Gebrauch: Reguläre Ausdrücke
- Schauen Sie sich diese Dateitypen: „* .cs“
Haben Sie nur den Quellcode überprüfen möchten (suchen Sie einfach nach (this ...
in den Dateien) oder Ihr laufendes Programm durch Reflexion (in diesem Fall kann diese this Diskussion Ihnen helfen)?
Yep. Nicht zu vergessen whitespace und Zeilenumbrüche zwischen der Klammer und 'this' –
Vielleicht könnte der Code in diesem Artikel über how to find extension methods targeting object verwendet werden? Könnte zum Beispiel leicht umgeschrieben werden und es verwenden, um alle Erweiterungs-Methoden zu dumpen, anstatt nur das Targeting object
.
Lösungsweite Textsuche mit einer Regex, die zu Ihrem Codierungsstil passt. Etwas wie "(*this +"
(hinzugefügt den ersten optionalen Speicherplatz, um eine gewisse Toleranz zu bekommen).
Ich würde die generierten Baugruppen mit Reflektion betrachten; durch die statischen Typen iterieren für Methoden mit [ExtensionAttribute]
... suchen
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;
}
Nur hinzufügen, es kann ein beliebiges Attribut mit dem Namen ExtensionAttribute sein, es muss nicht der gleiche Typ wie in System.Code.dll sein, damit können Sie diese Funktion beim Targeting von .NET 2 verwenden. – leppie
Wahr, in der Tat, ich ' ve benutzt mehrere - in LINQBridge und MiscUtil unter anderem ... Ich werde es aktualisieren ... –
Es benötigt auch nicht diesen Namespace :) Jedes Attribut namens ExtensionAttribute wird funktionieren. – leppie
- 1. Wie finde ich alle ydl_opts
- 2. Wie finde ich alle "" geschlossenen Zeichenketten in allen .cs-Dateien meiner Lösung?
- 3. Wie finde ich alle Assets eines Typs?
- 4. Wie finde ich alle Textdateien mit Regex?
- 5. Wie finde ich alle Unterordner eines Ordners?
- 6. cakephp Wie finde ich alle Modellnamen
- 7. Wie programmiere ich programmatisch alle Projekte in einer Lösung?
- 8. Wie finde ich alle Speicherzuweisungen in einer llvm ir-Codedatei?
- 9. Rails: Wie finde ich() alle in bestimmten Feldern eindeutigen Datensätze?
- 10. Wie finde ich in PostGIS alle Punkte innerhalb eines Polygons?
- 11. Wie finde ich alle in einer PHP-Datei verwendeten Klassen?
- 12. Wie finde ich alle Produkte ohne Bilder in Magento?
- 13. Wie finde ich alle untergeordneten Module in Python?
- 14. Wie finde ich alle Lösungen zu einem Ziel in Prolog?
- 15. Wie Service-Locator in .net Erweiterungsmethoden
- 16. Wie Erweiterungsmethoden anschließen
- 17. Wie werden Erweiterungsmethoden kompiliert?
- 18. Wie finde ich alle * .c Dateien für Cmake Build System
- 19. Wie finde ich alle Klassen, die IDisposable implementieren?
- 20. Statische Erweiterungsmethoden in Kotlin
- 21. "Erweiterungsmethoden" in Objective-C
- 22. Erweiterungsmethoden in Python
- 23. C# Erweiterungsmethoden in F #
- 24. Generische Erweiterungsmethoden in LINQ
- 25. Wie finde ich alle ausgecheckten Dateien mit ClearCase cleartool?
- 26. Wie finde ich die Bewertungen für alle technischen Bücher?
- 27. Wie finde ich alle Tabellen mit einem definierten EDT?
- 28. Verwalten einer Build alle Lösung in TFS
- 29. Wie finde ich die Dokumentation in Core.Std?
- 30. "Tabify" alle Dateien in Visual Studio-Lösung?
„this“ wird oft als Argument übergeben - ich denke, Sie müssten übereinstimmen „(dieser Typ Name“ Muster, gefolgt von " "oder") "und mit einer beliebigen Menge an Leerzeichen in der Mitte. Nicht eine einfache Regex (ich habe es nicht einmal versucht ...) –
Ja, aber in meiner Formatierung wäre es "(this", nicht "(this") so würde es nicht übereinstimmen. – tvanfosson
... außer wenn es ist das einzige Argument, also vielleicht eine Regex mit "(dies [A-Za-z]", obwohl ich es nur auf einer meiner Lösungen ausgeführt habe und nur 3 Beispiele davon als Argument und 50 oder so Extension-Methoden (Lose von HtmlHelper Erweiterungen für MVC) – tvanfosson