C# 6 中最方便的新特性之一是nameof
,它允许程序员有效地消除魔术字符串的使用。
根据文档,nameof
返回一个字符串:
用于获取变量、类型或成员的简单(非限定)字符串名称。
这适用于以下代码示例中的显式键入:
string magicString = nameof(magicString);
var
但是,当使用带有关键字的隐式类型时:
var magicString = nameof(magicString);
编译器抛出错误:
在声明之前不能使用局部变量“magicString”
然后,我对 Visual Studio 中可用的 C# Interactive 窗口进行了更多试验。同样,第一个示例运行良好,但第二个示例这次抛出了不同的错误:
错误 CS7019:无法推断“magicString”的类型,因为它的初始化程序直接或间接引用了定义。
表达式明明返回的nameof
是一个字符串,那么为什么编译器在与初始化变量一起使用时不能隐式输入呢?