gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:58:08 24 4
gpt4 key购买 nike

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

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 并重新启动和重建,一切都很好。如果我添加我的代码行并关闭并重新启动等。错误将在重建时再次出现。

对我来说很奇怪的错误。

谢谢大家的帮助

最佳答案

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

或者换句话说:是否有提及 ComboBoxSelectWhereFirstOrDefault 自定义扩展方法?

关于c# - 添加 lambda 表达式导致在尝试编译时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com