92 votes

Comment récupérer l'espace de noms dans une chaîne de caractères C# ?

Je suis en train d'écrire un programme qui a besoin de l'espace de noms du programme mais je n'arrive pas à trouver comment le récupérer. J'aimerais que le résultat final soit une chaîne de caractères.

J'ai pu trouver une page MSDN sur ce sujet, mais elle ne m'a pas été d'une grande utilité. http://msdn.microsoft.com/en-us/library/system.type.namespace.aspx

Toute aide serait appréciée. Le programme est écrit en C#.

EDIT : Désolé les gars, ce n'est pas une application console.

143voto

Joe R Points 10549

Cela devrait fonctionner :

var myType = typeof(MyClass);
var n = myType.Namespace;

Écrire à la console :

Type myType = typeof(MyClass);
Console.WriteLine("Namespace: {0}.", myType.Namespace);

Définition d'une étiquette WinForm :

Type myType = typeof(MyClass);
namespaceLabel.Text = myType.Namespace;

Ou créer une méthode dans la classe concernée et l'utiliser n'importe où :

public string GetThisNamespace()
{
   return GetType().Namespace;
}

23voto

Servé Laurijssen Points 1209

Pour compléter toutes les réponses.

Depuis C# 6.0, il existe le mot-clé nameof.

string name = nameof(MyNamespace);

Cela présente plusieurs avantages :

  1. Le nom est résolu au moment de la compilation
  2. Le nom sera modifié lors de la refonte de l'espace de noms.
  3. La syntaxe est vérifiée, le nom doit donc exister.
  4. code plus propre

Remarque : Cela ne donne cependant pas l'espace de noms complet. Dans ce cas, name sera égal à Bar :

namespace Foo.Bar
{
   string name = nameof(Foo.Bar);
}

20voto

IllidanS4 Points 811

Mettez ceci à votre disposition :

public static string GetCurrentNamespace()
{
    return System.Reflection.Assembly.GetExecutingAssembly().EntryPoint.DeclaringType.Namespace;
}

Ou si vous voulez que cette méthode se trouve dans une bibliothèque utilisée par votre programme, écrivez-la comme ceci :

[System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.NoInlining)]
public static string GetCurrentNamespace()
{
    return System.Reflection.Assembly.GetCallingAssembly().EntryPoint.DeclaringType.Namespace;
}

11voto

balage Points 409

Cela ne peut pas mal se passer :

MethodBase.GetCurrentMethod().DeclaringType.Namespace

9voto

No Idea For Name Points 10466

Si vous avez un article x de la classe A dans l'espace nominatif B que vous pouvez utiliser :

string s = x.GetType().Namespace;

non s contient "B"

vous pouvez également utiliser x.GetType().Name pour obtenir le nom du type ou x.GetType().FullName pour obtenir les deux

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X