C# 如何强制VisualStudio(C)根据ECMA-334标准编译源代码?
如何强制VisualStudioC根据ECMA-334标准编译源代码 例如,以下代码在ECMA-334标准中无效:C# 如何强制VisualStudio(C)根据ECMA-334标准编译源代码?,c#,visual-studio,ecma,C#,Visual Studio,Ecma,如何强制VisualStudioC根据ECMA-334标准编译源代码 例如,以下代码在ECMA-334标准中无效: foreach (var item in custQuery) { Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone); } 因为var不是ECMA-334标准关键字。在这种情况下,我想提醒自己。Visual Studio和.NET Framework附带的编译器在设计上不符合C语言版本发布时的最
foreach (var item in custQuery)
{
Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}
因为var不是ECMA-334标准关键字。在这种情况下,我想提醒自己。Visual Studio和.NET Framework附带的编译器在设计上不符合C语言版本发布时的最新版本。尽管有一些选项可以通过项目选项中的C语言级别设置诊断>C-2.0 ECMA-334功能的使用,但这对中断已进行的语言更改没有影响
VisualStudio2005支持C2.0语言。您可以安装免费提供的Express版本。您可以在命令行中使用Language version(语言版本)选项。它位于“生成”选项卡上的“高级选项”下。对于这种情况,您将选择ISO-2 请注意,这不是向后兼容模式。它只是禁止您使用比指定版本更新的版本中提供的功能 Eric Lippert对langversion选项的用途和目的有着深刻的认识 要注意它不是完全向后兼容模式,请以本文中的示例为例:
class C
{
public static bool operator < (C c1, C c2) { return true; }
public static bool operator > (C c1, C c2) { return true; }
public static bool operator < (bool b1, C c2) { return true; }
public static bool operator > (bool b1, C c2) { return true; }
static C H = new C();
static C I = new C();
static C J = new C();
static void G(bool b) { }
static void Main()
{
G ( H < I > ( J ) );
}
}
将langversion设置为C 1.0 ISO-1会禁止使用泛型,但在该版本的编译器中是合法的。您看过类似的内容吗?然而,很少有好的理由这样做。按照现代编程语言标准,ECMA-334是古老的。您错过了var、扩展方法、lambda函数、对象初始值设定项、方差、可选参数、wait/async等等。这还不包括C6中所有的好东西