web-dev-qa-db-ja.com

名前空間を文字列C#に取得するにはどうすればよいですか

私はプログラムの名前空間を必要とするプログラムを書いていますが、それを取得する方法を理解できないようです。最終結果を文字列にしたいと思います。

このトピックに関するMSDNページを見つけることができましたが、それは自分には役に立たないことがわかりました。 http://msdn.Microsoft.com/en-us/library/system.type.namespace.aspx

任意の助けをいただければ幸いです。プログラムはC#で記述されています。

編集:ごめんなさい、これはコンソールアプリケーションではありません。

46
Elliot Ames

これは動作するはずです:

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

コンソールに書き出す:

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

WinFormラベルの設定:

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

または、関連するクラスでメソッドを作成し、どこでも使用します。

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

これをアセンブリに追加します。

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

または、このメソッドをプログラムで使用されるライブラリに含める場合は、次のように記述します。

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

名前空間xにクラスAのアイテムBがある場合は、次を使用できます。

_string s = x.GetType().Namespace;
_

sには「B」は含まれません

x.GetType().Nameを使用して型名を取得するか、x.GetType().FullNameを使用して両方を取得することもできます

8

これは間違って行くことができません:

MethodBase.GetCurrentMethod().DeclaringType.Namespace
7
balage

すべての答えに追加します。

C#6.0以降には、nameofキーワードがあります。

string name = nameof(MyNamespace);

これにはいくつかの利点があります。

  1. 名前はコンパイル時に解決されます
  2. 名前空間をリファクタリングすると名前が変更されます
  3. 構文チェックされているため、名前が存在する必要があります
  4. クリーナーコード
6

単純に typeof を使用してから、クラス(つまりプログラム)を渡すことができます。

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

どちらが印刷されます:

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

引き続き使用できるJoeのコメントに基づいて

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

namespaceNameは、文字列値として名前空間名にアクセスする変数です。

2
BenM

キャプチャする必要があるネームスペースのクラスから実行する場合は、次を使用できます。

GetType().Namespace

これは、名前空間をリファクタリングでき、引き続き機能するため、うまく機能します。

0
Elliot Arazi

ロールアップとして、すべての投稿の回答:文字列tableNameとして指定されたテーブルからすべての列の値を取得します:

 
 var tableName = "INVENTORY_PRICE"; 
 var Assembly = Assembly.GetExecutingAssembly(); 
 
 var tip = typeof(Form3); 
 
 var t = Assembly.GetType(tip.Namespace + "。" + tableName); 
 if(t!= null)
 {
 var foos = db.GetTable(t); 
 
 foreach(foo f in foos)
 {
 Console.WriteLine(f + ":"); 
 foreach(f.GetType()。GetProperties()のvarプロパティ)
 if(property!= null)
 {
 var pv = property.GetValue(f 、null); 
 Console.WriteLine( "" + property.Name + ":" + pv); 
} 
 
 Console.WriteLine( "- ------------------- --------------------------- "); 
} 
} 
 

aDOを使用すると非常に簡単です。このサンプルではLINQコンテキストを使用しています...

0
Fatih ÜNAL