【发布时间】:2017-04-10 00:34:08
【问题描述】:
所以我使用 System.Linq 命名空间和方法 Any() 但由于某种原因它向我显示了一个错误:
ArrayList不包含任何定义...
我正在尝试检查一个数组是否包含另一个数组中的任何项目。不知道为什么,但不能发布我的代码。希望您知道问题所在。
【问题讨论】:
标签: c# linq namespaces
所以我使用 System.Linq 命名空间和方法 Any() 但由于某种原因它向我显示了一个错误:
ArrayList不包含任何定义...
我正在尝试检查一个数组是否包含另一个数组中的任何项目。不知道为什么,但不能发布我的代码。希望您知道问题所在。
【问题讨论】:
标签: c# linq namespaces
您不应该使用非泛型集合。 但是如果你真的想这样做,你可以编写一个帮助方法来将你的集合转换为 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
【讨论】:
Enumerable.Cast。
不要使用ArrayList。请改用List。
因为ArrayList 没有实现IEnumerable<T> 通用interface 和来自System.Linq 的扩展方法仅适用于实现接口IEnumerable<T> 的集合,例如List<T>。
【讨论】:
ArrayList 确实实现了IList,但它没有实现IList<T>,后者又实现了IEnumerable<T>,System.Linq 中的扩展方法使用了IEnumerable<T>。
ArrayList 是一个松散类型的集合(参见reference source),不能与需要强类型集合的Enumerable.Any 一起使用(参见reference source)。
顺便说一句,您不应该使用松散类型的集合,而是使用泛型集合。
【讨论】: