我希望从强类型命名空间引用中获取命名空间字符串,其方式与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
这可能吗?
备注:我希望能够引用任何可用的命名空间,而不仅仅是包含命名空间。
答案 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。:但显然其他答案在生成相同的字符串时更有效
。