【问题标题】:Why does the && operator break when not using brackets in this C# expression?为什么在此 C# 表达式中不使用括号时 && 运算符会中断?
【发布时间】:2019-06-05 02:25:05
【问题描述】:

我的一个朋友正在处理一个 C# 项目的拉取请求,但遇到编译器错误,因为更改的构建失败。我检查了语法,但确定它是正确的。

对于这行代码:

if (PreviewLink && Helpers.IsImageFile(path))

编译器抱怨如下:

错误 CS1525:无效的表达式术语“&&”
错误 CS1002: ;预计
错误 CS1513:} 预期

将其更改为以下内容可修复编译问题:

if ((PreviewLink) && (Helpers.IsImageFile(path)))

我不明白这里发生了什么,来自msbuild 的编译器错误并没有太大帮助。有人可以解释为什么没有括号的第一个表达式是无效的吗?我错过了什么?


现在是关于代码本身的一些背景信息。 && 运算符两侧的两个表达式都是booleans,请参见以下两个签名:

public bool PreviewLink { get; set; }
// -- snip --
public static bool IsImageFile(string filePath)

可以找到修复编译问题的实际更改here

这些是针对failedsuccesful 提交的 AppVeyor 构建,用于上面链接的更改。本地构建给出了相同的结果。

【问题讨论】:

  • 这是 .NET 的哪个版本?
  • @Fabjan 我相信它是 4.6.2,基于 <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>csproj 文件中。 AppVeyor 上的构建似乎使用了Visual Studio 2017 图像。不过对 C# 不太熟悉。
  • 你向我们展示的任何东西都无法解释这一点......
  • @MatthewWatson 注意的(失败的)表达式在this 文件中。还有什么我应该补充的吗?
  • 确实,两个代码示例都可以正常工作。我假设您在某处缺少;{} 并专注于不同的问题。考虑先检查其他错误消息。

标签: c# .net compiler-errors syntax-error


【解决方案1】:

查看您之前的签到:https://github.com/ShareX/ShareX/pull/3869/commits/f779c9d74d40f2bb8f7cf3f82a6686d6d9f76fee

它有以下一行:

if (PreviewLink) && Helpers.IsImageFile(path)

这会给你你看到的编译错误,所以我认为这是问题所在。

【讨论】:

  • 是的,这显然是不正确的。将其更改为 if (PreviewLink && Helpers.IsImageFile(path)) 仍然无法构建,正如您在 this 拉取请求中看到的那样。
  • @TimVisée 唯一合理的解释是,您没有构建您认为自己正在构建的东西。您确实有一些会给出该错误的代码,这太可疑了。如果你去删除不必要的括号now,它是否无法构建,还是现在可以?
  • 我同意。上一次提交(使用您显示的语句)produced 相同的错误。对于以下带有括号的提交,应该可以解决问题,build 清楚地显示了正确的提交是基于提交哈希签出的。也许这是 AppVeyor 的问题。我将尝试按照您的建议在本地进行此更改。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多