web-dev-qa-db-fra.com

Comment puis-je récupérer l'espace de noms sur une chaîne C #

J'écris un programme qui a besoin de l'espace de noms du programme mais je n'arrive pas à comprendre comment le récupérer. Je voudrais que le résultat final soit dans une chaîne.

J'ai pu trouver une page MSDN sur ce sujet, mais cela ne m'a pas été utile 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.

40
Elliot Ames

Cela devrait fonctionner:

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

Écrivez à la console:

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

Définir une étiquette WinForm:

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

Ou créez une méthode dans la classe appropriée et utilisez-la n'importe où:

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

Mettez ceci à votre assemblée:

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

Ou si vous voulez que cette méthode soit 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;
}
12
IllidanS4

si vous avez l'élément x of class A dans l'espace de noms B, 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

8
No Idea For Name

Cela ne peut pas aller mal: 

MethodBase.GetCurrentMethod().DeclaringType.Namespace
5
balage

Pour ajouter à toutes les réponses.

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

string name = nameof(MyNamespace);

Cela présente plusieurs avantages:

  1. Le nom est résolu lors de la compilation
  2. Le nom changera lors du refactoring de l'espace de noms
  3. La syntaxe est vérifiée, le nom doit donc exister
  4. code de nettoyage
4
Serve Laurijssen

Vous pouvez simplement utiliser typeof et ensuite passer en classe (I.e. Programme):

Console.WriteLine(typeof(Program).Namespace); 

Quel serait imprimer:

ConsoleApplication1
3
Darren
Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
Console.WriteLine("Namespace: {0}.", myType.Namespace);

S'appuyant sur le commentaire de Joe, vous pouvez toujours utiliser

Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
var namespaceName = myType.Namespace.ToString();

avec namespaceName étant une variable permettant d’accéder au nom de l’espace de nom en tant que valeur de chaîne.

2
BenM

en tant que roll upp, toutes les réponses postales: obtiennent les valeurs de toutes les colonnes d'une table donnée sous la forme d'une chaîne nomTable:


 var tableName = "INVENTORY_PRICE"; 
 var Assembly = Assembly.GetExecutingAssembly (); 

 var tip = typeof (Form3); 

 var t = Assembly.GetType (tip.Namespace + "." + nomTable); 
 if (t! = null) 
 {
 var foos = db.GetTable (t); 

 foreach (var f dans les foos) 
 {
 Console.WriteLine (f + ":"); 
 foreach (propriété var dans f.GetType (). GetProperties ()) 
 si (propriété! = null) 
 {
 var pv = property.GetValue (f, null); 
 Console.WriteLine ("" + property.Name + ":" + pv); 
 } 

 Console.WriteLine ("------------------------------------------------- --- "); 
 } 
 } 

c'est très facile si on utilise ado, cet exemple utilise le contexte LINQ ...

0
Fatih ÜNAL