是否可以使用预处理程序指令检测当前版本的C#是否为6或更高,因此在编译时?
我想做这样的事情:
var myVar = ...;
string name;
#if VERSION_6_OR_MORE
name = nameof(myVar);
#else
name = "myVar";
#endif
Run Code Online (Sandbox Code Playgroud)
我使用Visual Studio 2015和C#6,所以我可以使用nameof().其他想要编译此代码的人可能正在使用旧版本,但nameof()不存在.
我想使用预处理器指令,所以我可以保留nameof()在C#6中,但是不使用该版本的其他人也可以编译它.
小智 7
您可以在项目文件中显式指定语言版本并定义条件常量:
<LangVersion>6</LangVersion>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DefineConstants Condition="'$(LangVersion)' == '6'">DEBUG;TRACE;LANG_VERSION_6</DefineConstants>
Run Code Online (Sandbox Code Playgroud)
该nameof()经营者是指,以降低维护:使用它,你不必隐藏在字符串标识符,所以当你重命名一个变量,参数或成员,在您使用它(例如一个地方ArgumentNullException(nameof(paramName)))将被更新,当您重构paramName名称.
现在用你的方法,你有效地加倍您的维护表面,而不是降低它(因为你现在有两个字符串变种和的nameof()版本,两者保持不必),否定使用nameof()完全.
因此,如果您想支持较旧的C#版本,请坚持使用适用于这些版本的功能:在字符串中使用标识符.
| 归档时间: |
|
| 查看次数: |
2192 次 |
| 最近记录: |