81

我正在编写一个需要程序名称空间的程序,但我似乎不知道如何检索它。我希望最终结果在一个字符串中。

我能够找到有关此主题的 MSDN 页面,但事实证明它对我自己没有帮助。 http://msdn.microsoft.com/en-us/library/system.type.namespace.aspx

任何帮助,将不胜感激。该程序是用 C# 编写的。

编辑:对不起,这不是控制台应用程序。

4

9 回答 9

129

这应该有效:

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;
}
于 2013-08-28T10:35:04.287 回答
20

添加到所有答案。

从 C# 6.0 开始,就有了 nameof 关键字。

string name = nameof(MyNamespace);

这有几个优点:

  1. 名称在编译时解析
  2. 重构命名空间时名称会改变
  3. 它经过语法检查,因此名称必须存在
  4. 更清洁的代码

注意:这并没有给出完整的命名空间。在这种情况下,name将等于Bar

namespace Foo.Bar
{
   string name = nameof(Foo.Bar);
}
于 2016-07-26T08:12:18.807 回答
19

把它放到你的程序集中:

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;
}
于 2013-08-28T10:37:03.133 回答
9

如果您在命名空间中有x类项目,您可以使用:AB

string s = x.GetType().Namespace;

s包含“B”

您还可以使用x.GetType().Name来获取类型名称或x.GetType().FullName同时获取两者

于 2013-08-28T10:37:58.723 回答
9

这不会出错:

MethodBase.GetCurrentMethod().DeclaringType.Namespace
于 2015-10-03T12:49:58.663 回答
6

您可以简单地使用typeof然后传入类(即程序):

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

哪个会打印:

ConsoleApplication1
于 2013-08-28T10:35:08.837 回答
3
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访问命名空间名称作为字符串值。

于 2013-08-28T10:38:55.503 回答
2

如果您从需要捕获的命名空间中的类执行它,那么您可以使用:

GetType().Namespace

这很好用,因为它允许您重构命名空间并且仍然可以工作。

于 2016-09-15T09:51:51.260 回答
2

作为汇总所有帖子的答案:从作为字符串 tableName 给出的表中获取所有列的值:

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

                var tip = typeof(Form3);

                var t = assembly.GetType(tip.Namespace + "." + tableName);
                如果(t!= null)
                {
                    var foos = db.GetTable(t);

                    foreach (var f in foos)
                    {
                        Console.WriteLine(f + ":");
                        foreach(f.GetType().GetProperties() 中的 var 属性)
                            如果(属性!= null)
                            {
                                var pv = property.GetValue(f, null);
                                Console.WriteLine(" " + property.Name + ":" + pv);
                            }

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

如果我们使用 ado 很容易,这个示例使用 LINQ 上下文......

于 2017-01-26T03:18:12.603 回答