如何将命名空间检索到字符串C#

Ell*_*mes 49 c# string namespaces

我正在编写一个需要程序命名空间的程序,但我似乎无法弄清楚如何检索它.我希望最终结果是在一个字符串中.

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

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

编辑:对不起,伙计们,这不是一个控制台应用程序.

Joe*_*zer 83

这应该工作:

var myType = typeof(MyClass);
var n = myType.Namespace;
Run Code Online (Sandbox Code Playgroud)

写出控制台:

Type myType = typeof(MyClass);
Console.WriteLine("Namespace: {0}.", myType.Namespace);
Run Code Online (Sandbox Code Playgroud)

设置WinForm标签:

Type myType = typeof(MyClass);
namespaceLabel.Text = myType.Namespace;
Run Code Online (Sandbox Code Playgroud)

或者在相关类中创建一个方法并在任何地方使用:

public string GetThisNamespace()
{
   return GetType().Namespace;
}
Run Code Online (Sandbox Code Playgroud)

  • WriteLine不是她的重要部分.使用`string.Format()`继续前进. (8认同)

Ill*_*ack 15

把它放到你的组件:

public static string GetCurrentNamespace()
{
    return System.Reflection.Assembly.GetExecutingAssembly().EntryPoint.DeclaringType.Namespace;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望此方法位于程序使用的库中,请按以下方式编写:

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


No *_*ame 8

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

string s = x.GetType().Namespace;
Run Code Online (Sandbox Code Playgroud)

s包含"B"

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


Ser*_*sen 8

添加到所有答案。

从C#6.0开始,存在nameof关键字。

string name = nameof(MyNamespace);
Run Code Online (Sandbox Code Playgroud)

这有几个优点:

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

  • 但是,这并没有提供完整的名称空间。如果这样做会很棒。 (11认同)
  • 就目前而言,这个答案具有误导性,因为它_仅_适用于单段命名空间。 (5认同)
  • @ThePademelon,从技术上来说确实如此。如果您想要包含您引用的名称空间的名称空间的名称,可以执行类似“$”{nameof(ns1)}.{nameof(ns2)}“”的操作 (3认同)

bal*_*age 7

这不会出错:

MethodBase.GetCurrentMethod().DeclaringType.Namespace
Run Code Online (Sandbox Code Playgroud)


Dar*_*ren 6

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

Console.WriteLine(typeof(Program).Namespace); 
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

ConsoleApplication1
Run Code Online (Sandbox Code Playgroud)