【问题标题】:Linq namespace and method any()Linq 命名空间和方法 any()
【发布时间】:2017-04-10 00:34:08
【问题描述】:

所以我使用 System.Linq 命名空间和方法 Any() 但由于某种原因它向我显示了一个错误:

ArrayList 不包含任何定义...

我正在尝试检查一个数组是否包含另一个数组中的任何项目。不知道为什么,但不能发布我的代码。希望您知道问题所在。

【问题讨论】:

    标签: c# linq namespaces


    【解决方案1】:

    您不应该使用非泛型集合。 但是如果你真的想这样做,你可以编写一个帮助方法来将你的集合转换为 IEnumerable。

        static void Main(string[] args)
        {
            var list = new ArrayList {3, "test", null};
    
            var result = AsEnumerable(list).Any(x => x == null);
        }
    
        private static IEnumerable<object> ToEnumerable(ArrayList data)
        {
            var enumerator = data.GetEnumerator();
            while (enumerator.MoveNext())
                yield return enumerator.Current;
        }
    

    但这只是一个例子。使用 List 而不是 ArrayList

    【讨论】:

    【解决方案2】:

    不要使用ArrayList。请改用List

    因为ArrayList 没有实现IEnumerable&lt;T&gt; 通用interface 和来自System.Linq 的扩展方法仅适用于实现接口IEnumerable&lt;T&gt; 的集合,例如List&lt;T&gt;

    【讨论】:

    • 不完全正确,至少目前的形式不正确。 ArrayList 确实实现了IList,但它没有实现IList&lt;T&gt;,后者又实现了IEnumerable&lt;T&gt;System.Linq 中的扩展方法使用了IEnumerable&lt;T&gt;
    • 很好,伙计们现在我明白了
    【解决方案3】:

    ArrayList 是一个松散类型的集合(参见reference source),不能与需要强类型集合的Enumerable.Any 一起使用(参见reference source)。

    顺便说一句,您不应该使用松散类型的集合,而是使用泛型集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多