System.Linq和System.Collections之间的C#Linq模糊调用

时间:2019-01-04 20:41:37

标签: c# linq collections

有类似的问题-到目前为止,它们都没有帮助。

我在打电话:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

然后在我的代码的一部分中,VS指出LINQ方法(.Last()和.Max())中的错误。我将鼠标悬停在.Max()上。错误提示:

  

以下方法或属性之间的调用不明确:'System.Linq.Enumerable.Max(System.Collections.Generic.IEnumerable )'和'System.Linq.Enumerable.Max(System.Collections.Generic .IEnumerable )'

我尝试重新安装所有参考和软件包,然后重新启动VS,IIS(这是一个网站)。 VS识别System.Linq,所以这不是问题。...

我不知道为什么这是所有突然的抛出错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您在代码中的任何地方或被引用的某人中有人实施了自己的IEnumerable<T>扩展方法,并且不了解得更好,并使用了与框架提供的名称空间相同的名称空间,则会发生这种情况:

  • Alpha程序集在IEnumerable<T>名称空间中滚动其自己的System.Linq扩展方法:

    namespace System.Linq {
        public static class MyEnumerable {
            public static T Max<T>(this IEnumerable<T> source) { //...
            }
        //... 
        }
    }
    
  • 装配体Charlie认为Alpha之所以出色,是因为它提供了其他功能,并完全忽略了Alpha所隐藏的令人讨厌的惊喜。

    using System.Linq; //woops
    
    namespace Charlie {
        class C {
            void Foo() {
                var l = new List<object>() { 1, 2, 3 };
                var m = l.Max() /*compile time error. Ambiguous call*/ } }
    }
    

我不知道这是否可能是您的情况,但可能是这样。另一个潜在的候选者可能是版本冲突,但是我不确定VS是否有可能。我从未遇到过与System.*名称空间类似的情况。