D 中的 C# 风格的 nameof 运算符?
C#-style nameof operator in D?
C# 6 (https://msdn.microsoft.com/library/dn986596.aspx) 中有一个 "nameof" 运算符。 D有模拟吗?或者一些模仿它的构造?
我相信 stringof
的功能大致相同。例如,第一个 C# 示例的 D 模拟 link 是:
void f(string s) {
if (s == null) throw new Exception(s.stringof ~ " is null!");
}
还有std.traits.fullyQualifiedName
。它按照罐头上的说明进行操作:
module mymodule;
import std.traits : fullyQualifiedName;
class MyClass { int myvar; }
pragma(msg, MyClass.myvar.stringof); // myvar
pragma(msg, fullyQualifiedName!(MyClass.myvar)); // mymodule.MyClass.myvar
正如第一个 link 指出的那样,fullyQualifiedName
可能更适合编译时代码生成,它有助于尽可能具体以避免与本地符号冲突。
C# 6 (https://msdn.microsoft.com/library/dn986596.aspx) 中有一个 "nameof" 运算符。 D有模拟吗?或者一些模仿它的构造?
我相信 stringof
的功能大致相同。例如,第一个 C# 示例的 D 模拟 link 是:
void f(string s) {
if (s == null) throw new Exception(s.stringof ~ " is null!");
}
还有std.traits.fullyQualifiedName
。它按照罐头上的说明进行操作:
module mymodule;
import std.traits : fullyQualifiedName;
class MyClass { int myvar; }
pragma(msg, MyClass.myvar.stringof); // myvar
pragma(msg, fullyQualifiedName!(MyClass.myvar)); // mymodule.MyClass.myvar
正如第一个 link 指出的那样,fullyQualifiedName
可能更适合编译时代码生成,它有助于尽可能具体以避免与本地符号冲突。