C#7.0语言功能在.Net 4.x上编译错误

时间:2017-06-02 13:46:37

标签: c# c#-7.0

我有一个使用 .Net 4.0的项目。(目标框架是.Net 4)。

我使用Visual Studio 2017编译源代码,并使用以下代码:

if(int.TryParse(inputText, out int x))
   StartAnotherMethod(x);

它在我的计算机上成功编译,所以我将它提交到存储库并等待构建服务器也进行编译。

令人惊讶的是,它有编译错误。

  

错误CS1525:无效的表达式术语' int'

     

错误CS1003:语法错误,','预期

我在在线编译器中检查过它。它使用.Net 4.5,也显示编译错误

https://dotnetfiddle.net/pibxC2

  

编译错误(第9行,第32行):无效的表达式术语' int'

     

编译错误(第9行,第33栏):;预期

     

编译错误(第9行,第33行):无效的表达式术语')'

     

编译错误(第9行,第34行):;预期

     

编译错误(第9行,第34行):无效的表达式术语')'

     

编译错误(第9行,第35栏):;预期

正如我所读到的,语言功能并不需要新的框架,所以它应该没有任何问题进行编译。

我错过了什么?

3 个答案:

答案 0 :(得分:12)

您没有为C#7使用编译器。将编译器更改为Roslyn。

这里的关键是可用的语言功能由编译器决定,而不是目标框架。

答案 1 :(得分:0)

试试这个

const pipe = (f, ...fs) => x =>
  f === undefined ? x : pipe(...fs)(f(x))

const foo = pipe(
  x => x + 1,
  x => `hey look ${x * 2} a string!`,
  x => x.substr(0, x.length) + Array(5).join(x.substring(x.length - 1)),
  console.log
)

foo(3) // hey look 8 a string!!!!!

答案 2 :(得分:0)

这是构建服务器上的编译问题。 我通过将一个语句分为两个来解决它,如下所示。

int.TryParse(input,out int value);

解决方案: int value = 0; int.TryParse(输入,输出值);

或者如果允许,可以在构建服务器上更改编译器。