我有以下代码,它在 .Any( 之后的 lambda 表达式下显示一条波浪形的红线,因为 System.Linq 版本 3.5 和 4.0 之间存在“模糊调用”-如何强制它使用特定版本?
它编译并运行良好。
string[] allowedExtensions = { "PNG", "JPG", "JPEG", "GIF" };
string fileExtension = (Path.GetExtension(postedFile.FileName) ?? "NULL").ToUpper().TrimStart(new[] { '.' });
if (this.MediaService.FileAllowed(postedFile)
&& allowedExtensions.Any(e => e == fileExtension))
{ ... }
更新 :
我现在检查了整个解决方案中的所有 (60) 个项目,并且所有对 System.dll 和 System.Core.dll 的引用都是 4.0 版 - 我真的不明白它从哪里获得对 3.5 的引用。
最佳答案
在 ReSharper 在我使用 Linq 表达式但尚未导入“System.Linq”的文件中提供“引用 System.Core”和“导入 System.Linq”后,我遇到了这个问题。当我执行 ReSharper 命令时,我得到了一些错误,它的一部分失败了。然后我项目中的所有 Linq 表达式在 System.Core 3.5 和 4.0 之间都是模棱两可的。查看我所有的 System 和 System.Core 引用资料,它们都是 4.0。删除对 System.Core (4.0) 的引用导致歧义错误消失,并使 System.Core 从该项目的引用列表中消失。当我回去重新添加 System.Core 时,虽然它没有出现在解决方案资源管理器的引用列表中,但在“添加对”对话框中的引用进行了检查。尝试在此处取消选中它然后重新检查它导致 System.Core 已被我的项目引用的错误。我仍在修复错误,所以我不知道这是否会影响构建过程。
关于linq - 拾取两个版本的 System.Linq 导致的不明确调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297747/