C#6名称空间作为强类型名称空间引用的字符串

时间:2016-06-08 12:37:40

标签: c# .net namespaces

我希望从强类型命名空间引用中获取命名空间字符串,其方式与C#6 nameof()适用于类型和类型成员的方式类似。

namespace This.Is.My.Namespace
{
    class Program
    {
        static void Main()
        {
            string namespaceString = nameof(This.Is.My.Namespace);
            Console.Write(namespaceString);
        }
    }
}

但我得到的结果只是命名空间的最后一部分(例如" Namespace")。我的目标是.NET 4.6

这可能吗?

备注:我希望能够引用任何可用的命名空间,而不仅仅是包含命名空间。

3 个答案:

答案 0 :(得分:2)

这应该有用......

var myType = this.GetType();
var namespaceString = myType.Namespace;

答案 1 :(得分:1)

对于代码

下的字符串使用
    Type myType = typeof(MyClass);
    var n = myType.Namespace;

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

答案 2 :(得分:0)

nameof在编译时被替换为string,其中string是该成员的确切文本(就像您将自己放在""中一样)。 / p>

为了实现你想要的东西你可以构造一些怪异的东西:

namespace This.Is.My.Namespace
...
var namespaceString = $"{nameof(This)}.{nameof(This.Is)}.{nameof(This.Is.My)}.{nameof(This.Is.My.Namespace)}";

这将确保每个成员在编译时存在并允许轻松重构(除非您决定添加/删除某些名称)。

P.S。:但显然其他答案在生成相同的字符串时更有效