Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不';t我们有多个编译器要检查“;“兼容”;具有_C#_.net_Syntax - Fatal编程技术网

C# 为什么不';t我们有多个编译器要检查“;“兼容”;具有

C# 为什么不';t我们有多个编译器要检查“;“兼容”;具有,c#,.net,syntax,C#,.net,Syntax,你知道C#现在已经发展到了7.1版本,有很多新的语法和特性(称为“语法提示”) 但在以前的版本中,如VS2013、VS2012或VS2010中,这些糖是不能食用的。如果你复制源代码并把它们放在那里,显然会有很多错误,因为那里的编译器无法识别它们。不同的VS可能有不同类型的编译器 如果我们想让我们的代码与不同类型的VS中的不同编译器“兼容”(例如:如果我想编写一个适合VS2010的简单代码,我首先将我的编译器切换到VS2010并进行编写),为什么我们不可以切换多个编译器呢。那更好?原始问题 在较低

你知道C#现在已经发展到了7.1版本,有很多新的语法和特性(称为“语法提示”)

但在以前的版本中,如VS2013、VS2012或VS2010中,这些糖是不能食用的。如果你复制源代码并把它们放在那里,显然会有很多错误,因为那里的编译器无法识别它们。不同的VS可能有不同类型的编译器

如果我们想让我们的代码与不同类型的VS中的不同编译器“兼容”(例如:如果我想编写一个适合VS2010的简单代码,我首先将我的编译器切换到VS2010并进行编写),为什么我们不可以切换多个编译器呢。那更好?

原始问题 在较低的网络框架和编译器中使用高级语法 在最新的VS中,它可以成功编译,为什么

在这个问题上是一本很好的读物

不过,一种常见的方法是使用编译器 从高级语言特性到低级语言的“低级” 相同语言的功能

简言之,“较新”的功能被转换为“较旧”的功能,因此它们继续在框架上运行(即使它没有较新功能的概念)

的Roslyn源代码是降低的一个示例(它将
使用
转换为
最终尝试
):

//
///将using语句重写为try finally语句。可采用两种形式:
///1)使用(expr)stmt
///2)使用(C=expr)stmt
///   
///前者由RewriteExpressionUsingStatement处理,后者由
///RewriteDeclarationUsingStatement(在循环中调用,每个本地声明一次)。
/// 
奖金问题 如果我们想制作一个新的编译器,为什么不让我们切换多个编译器呢 我们的代码与不同类型的编译器“兼容” VS(例如:如果我想写一个适合VS2010.I的简单代码 首先将我的编译器切换到VS2010并进行编写)。那太好了 更好吗

你可以很容易地做到这一点,只要你是在VS2013或更高版本。C#编译器从VS 2013开始提供


此外,您通常不需要这样做,因为Visual Studio允许您这样做。

因为编译器读取并编译代码。该框架不涉及这一点。如果使用VS2017编译,那么这些“语法糖”表达式就不会有太多问题。C#或vb.net的语法与netframework的版本是一致的wrong@Steve:因为不同类型的编译器具有不同类型的语法。为什么我们不为VS产品嵌套不同的编译器,这样我们就可以知道我们在较低的编译器中编写的内容是否“兼容”了?据我所知,在同一台机器上可以有不同版本的VS(以及编译器)。但你确实有它。项目>属性>构建选项卡>高级按钮>语言版本。事实上,我真正想问的是我在上面做了哪些更改(一开始,我没有说清楚)。但你们的一些回答给了我一些建议,让我深刻理解“降低”。所以“+1”投票给你。查看@xqMogvKW上面的
奖金问题。
/// <summary>
/// Rewrite a using statement into a try finally statement.  Two forms are possible:
///   1) using (expr) stmt
///   2) using (C c = expr) stmt
///   
/// The former is handled by RewriteExpressionUsingStatement and the latter is handled by
/// RewriteDeclarationUsingStatement (called in a loop, once for each local declared).
/// </summary>