我正在寫一個程序,需要程序的命名空間,但我似乎無法弄清楚如何檢索它。我想最終結果是在一個字符串中。我怎樣才能檢索命名空間到一個字符串C#
我能找到關於這個主題的MSDN頁面,但它證明對我自己沒有幫助。 http://msdn.microsoft.com/en-us/library/system.type.namespace.aspx
任何幫助,將不勝感激。該程序是用C#編寫的。
編輯:抱歉的傢伙,這不是一個控制檯應用程序。
我正在寫一個程序,需要程序的命名空間,但我似乎無法弄清楚如何檢索它。我想最終結果是在一個字符串中。我怎樣才能檢索命名空間到一個字符串C#
我能找到關於這個主題的MSDN頁面,但它證明對我自己沒有幫助。 http://msdn.microsoft.com/en-us/library/system.type.namespace.aspx
任何幫助,將不勝感激。該程序是用C#編寫的。
編輯:抱歉的傢伙,這不是一個控制檯應用程序。
這應該工作:
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;
}
不幸的是它不是控制檯應用程序,所以行中{0}的含義是:Console.WriteLine(「Namespace:{0}。」,myType.Namespace);我不知道。 –
好的,它是什麼類型的應用程序? –
WriteLine不是她必不可少的部分。使用'string.Format()'並繼續。 –
把這個程序集:
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;
}
如果你已經在命名空間B
A
類的項目x
你可以使用:
string s = x.GetType().Namespace;
沒有s
包含「B」
你也可以使用x.GetType().Name
要獲得類型名稱或x.GetType().FullName
兩全
Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
Console.WriteLine("Namespace: {0}.", myType.Namespace);
建立在喬的評論上,你仍然可以使用
Type myType = typeof(MyClass);
// Get the namespace of the myClass class.
var namespaceName = myType.Namespace.ToString();
與namespaceName
是作爲字符串值訪問命名空間名稱的變量。
這不能出差錯:
MethodBase.GetCurrentMethod().DeclaringType.Namespace
這比接受的答案和其他變體在這裏發佈的更好嗎? –
要添加到所有的答案。
由於C#6.0有關鍵字nameof。
string name = nameof(MyNamespace);
這有幾個優點:
雖然這並不能提供完整的命名空間。如果是的話,會很棒。 –
如果你從一個類命名空間中的執行它,你需要捕捉,然後你可以使用:
GetType().Namespace
這工作得很好,因爲它然後讓你重構命名空間,仍然可以工作。
成卷UPP: 正從爲以字符串形式的表名的表中的所有列的價值觀:
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 (var f in foos) { Console.WriteLine(f + ":"); foreach (var property in f.GetType().GetProperties()) if (property != null) { var pv = property.GetValue(f, null); Console.WriteLine(" " + property.Name + ":" + pv); } Console.WriteLine("------------------------------------------------"); } }
這是非常容易,如果我們使用ADO,此示例使用LINQ背景下..
我不明白你的問題。你爲什麼不直接在你想要的地方寫出程序的命名空間?它以某種方式改變? – IllidanS4
@ IllidanS4:這是一個非常有效的問題。在程序中對字符串中的命名空間進行硬編碼是一種災難 - 遲早有人會改變命名空間並忘記或不知道它也被編碼到程序中,然後它將失敗。 – RenniePet
用例:程序集中的嵌入式資源具有名稱空間前綴的路徑。下面的答案給出了一個強類型的查找前綴的方法。 –