So prüfen Sie, ob die Zeichenfolge ein Namespace ist

8

Ich habe eine Zeichenfolge und möchte überprüfen, ob es einen richtigen Namespace darstellt, z. System.IO ist in Ordnung, aber System.Lol ist nicht.

Ich denke, einige Überlegungen sollten verwendet werden, aber ich kann das nicht herausfinden.

Irgendwelche Gedanken?

    
Darmak 09.04.2010, 09:34
quelle

5 Antworten

4

Ihre Frage "Wie überprüft man, ob ein String ein Namespace ist" ist nur gültig, wenn Sie in Betracht ziehen, wo Sie nach Namespaces suchen.

Namespaces sind Präfixe für Klassennamen und Klassen sind auf eine Assembly beschränkt. Um zu überprüfen, ob ein Namespace vorhanden ist, müssen Sie entscheiden, welche Assembly Sie durchsehen möchten, um das Vorhandensein des Namespace zu ermitteln.

Sobald Sie entschieden haben, welche Assemblies Sie bereit sind, durchzusehen, können Sie sie für die Existenz eines bestimmten Namespace wie folgt durchlaufen:

%Vor%     
Paul Turner 09.04.2010, 10:14
quelle
8

Versuchen Sie diesen Ansatz:

%Vor%

wo CS0234 ist:

  

Der Name des Typs oder Namespace 'name'   nicht in der Klasse oder dem Namespace vorhanden   'Geltungsbereich' (fehlt eine Baugruppe?   Referenz?)

Benutzerdefinierte Referenzen hinzufügen:

%Vor%

Verwendung:

%Vor%     
abatishchev 09.04.2010 09:47
quelle
2

Könnten Sie das tun?

%Vor%

Dann einfach überprüfen, ob die Zeichenfolge in der Liste ist?

(Achtung, dies ist kein getesteter Code!)

    
Siyfion 09.04.2010 09:40
quelle
0

Die CLR hat nicht wirklich ein Konzept von "Namespaces": Sie sind wirklich wenig mehr als eine Namenskonvention. Also gibt es keine API, um "Namespaces auflisten" oder "Namespaces abrufen" oder sogar "alle Typen in diesem Namespace abzurufen".

Das Beste, was Sie tun können, ist, alle geladenen Assemblies durchzulaufen, dann alle exportierten Typen in jeder dieser Assemblies zu durchlaufen und zu prüfen, ob die angegebene Zeichenkette ein "Präfix" für einen dieser Typnamen ist. Ich kann mir vorstellen, dass diese Lösung nicht die schnellste der Welt sein würde, aber auch nicht komplett unbrauchbar wäre.

    
Dean Harding 09.04.2010 09:38
quelle
-2

Es gibt keine Überlegungen zu Namespaces. Die Namespaces definieren den vollständigen Typnamen. Was Sie also tun müssen, ist:

  • Zählen Sie alle Typen auf (Sie geben nicht den Quellsatz an, sagen wir .NET Framework, dann müssen Sie alle Standard-.NET-Assemblys einschließen (sehen Sie sich die von VS beim Erstellen eines Projekts an) oder Ihre benutzerdefinierte Assembly , dann tippt die Baugruppe ein.)
  • Suchen Sie nach der Namespace-Eigenschaft für den angegebenen Typ

Was Sie brauchen:

Assembly.Load-Methode

Assembly.GetTypes-Methode

Type.Namespace-Eigenschaft

    
Marek 09.04.2010 09:40
quelle

Tags und Links