J'ai une chaîne et je veux vérifier si cela représente un espace de nom propre, par exemple. Je suppose que certaines réflexions doivent être utilisées, mais je ne peux pas comprendre cela. P>
Toutes les pensées? p> system.io code> est ok, mais
system.lol code> n'est pas. p>
5 Réponses :
Le CLR n'a pas vraiment de concept de "espaces de noms": ils sont vraiment peu plus qu'une convention de dénomination. Donc, il n'y a pas d'API pour "List des espaces de noms" ou "Obtenir des espaces de noms" ou même "Obtenir tous les types d'espace de noms". P>
Le meilleur que vous puissiez faire est de boucler à travers toutes les assemblées chargées, puis bouclez tous les types exportés dans chacun de ces assemblages et vérifiez si la chaîne donnée est un «préfixe» sur l'un de ces noms de type. J'imagine que cette solution ne serait pas le plus rapide du monde, mais cela ne serait pas totalement impraticable, non plus. P>
Il n'y a pas de réflexion sur les espaces de noms. Les espaces de noms définissent le nom de type complet. Donc, ce que vous devez faire est: p>
Ce que vous devez utiliser: p>
Méthode de chargement de la charge < / p>
Méthode Assembly.getTypes < / p>
Pourriez-vous faire cela? Vérifiez simplement pour voir si la chaîne est dans la liste? p> (Soyez averti, ce n'est pas testé! ) p> p>
Essayez cette approche: où Le nom de type ou d'espace de noms 'Nom' fait
n'existe pas dans la classe ou l'espace de noms
'Portée' (manquez-vous une assemblée
Référence?) P>
blockQuote> Références personnalisées Ajout: P> cs0234 code> est: p>
public static void Main(string[] args)
{
using (var tester = new NamespaceTester())
{
var success = tester.Test(new[] {
"System.IO",
"System.LOL"
});
}
}
Votre question "Comment vérifier si la chaîne est un espace de noms" n'est valide que lorsque vous envisagez où em> vous vérifiez les espaces de noms. Les espaces de noms sont des préfixes aux noms de classe, et les classes sont scopées à un assemblage. Pour vérifier si un espace de noms existe, vous devez décider quels assemblages vous êtes prêt à rechercher l'existence de l'espace de noms. P> Une fois que vous avez décidé quels assemblages vous êtes prêt à rechercher, vous pouvez itération. à travers eux pour l'existence d'un espace de noms particulier comme: p>
BTW, vous ne pouvez pas utiliser le mot-clé réservé espace de noms code> comme nom de variable;)
Juste pour la correction de l'exactitude, vous devriez @ -izer le paramètre d'espace de noms, l'espace de noms est un mot clé C # :)
Oh, si pointilleux! Je suis à peu près sûr que la réponse est lisible sans, mais une édition est la vôtre. :)
Retour Assemblys.SelectMany (A => A.GetTypes ()). Toute (t => t.Namespace == ns) code>