添加 lambda 表达式会导致尝试编译时出现奇怪的错误

本文关键字:错误 编译 表达式 lambda 添加 | 更新日期: 2023-09-27 18:36:34

所以目前有一段代码看起来像这样...

string name = GetValues(sequenceOfCodes, 0, IDtoMatch, 1)[0];

我刚刚将以下行更新为

string name = sequenceOfCodes
                  .Select(x => x[0])
                      .Where(x => x == IDtoMatch)
                          .FirstOrDefault();

这应该有望返回同样的东西。

sequenceOfCodes 是一个List<List<String>>IDtoMatch也是一个string

所以希望这一切看起来都很好。

但是当我去编译时,我得到一个奇怪的错误

The type 'System.Windows.Forms.ComboBox' is defined in an assembly 
that is not referenced. 
You must add a reference to assembly 'System.Windows.Forms, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089'

当我拿走我新添加的代码时,它可以很好地编译并运行......那么为什么只是因为我添加了lambda expression它就认为我需要引用System.Windows.Forms.ComboBox

只是为了说明这是一个控制台应用程序。不是Winforms应用程序。

-----------更新----------

好的,所以我发现其中一个引用确实引用了System.Windows.Forms,我真的很失望,因为这是核心代码,不应该有这样的依赖:(

但是,我仍然想知道为什么直到我添加代码行之后才出现错误。

确认一下,如果我删除我的代码,我可以关闭VS并重新启动并重建,一切都很好。如果我添加我的代码行并关闭并重新启动等。重建时将再次出现错误。

对我来说非常奇怪的错误。

谢谢大家的帮助

添加 lambda 表达式会导致尝试编译时出现奇怪的错误

您提到其他项目之一确实引用了窗口窗体。我的猜测是,这个项目还声明了一些范围内的扩展方法(给定您的using指令),并且编译器需要探索这些扩展方法以解决重载问题 - 大概是WhereSelectFirstOrDefault方法;意思是:在将其与其他候选者进行比较之前,它无法确定这些的最佳重载是System.Linq.Enumerable重载,并且如果无法理解竞争方法签名中使用的类型,它就无法做到这一点。

或者换句话说:是否有一个SelectWhereFirstOrDefault的自定义扩展方法提到ComboBox