IEnumerable和Array之间有什么区别?IList和List之间又有什么区别?

12 浏览
0 Comments

IEnumerable和Array之间有什么区别?IList和List之间又有什么区别?

IEnumerableArray有什么区别?\nIListList有什么区别?\n它们似乎具有相同的功能。

0
0 Comments

IEnumerable和Array的区别在于,IEnumerable是一个接口,用于表示能够枚举集合的类型,而Array是一个具体的集合类型,用于表示固定大小的数组。

IList和List的区别在于,IList也是一个接口,用于表示可变大小的列表,而List是IList接口的一个具体实现。

生成一个IEnumerable集合是惰性的,即在调用该集合之前不会执行任何代码。下面是一个示例:

public IEnumerable GetTwoInts()
{
  yield return 1;
  yield return 2;
}
public void Something()
{
  var twoInts = GetTwoInts();
}

在方法Something中,调用GetTwoInts()并不会实际执行GetTwoInts方法,因为该枚举从未被迭代。

要使该方法被执行,可以将twoInts放入foreach循环中,或者调用twoInts.ToList()方法。

希望能够解决你的疑问。如果还有其他问题,请随时提问。谢谢!

0
0 Comments

IEnumerable是一个接口,允许通过集合中的项进行迭代(例如通过foreach关键字)。

数组是.NET的内置类型。它保存相同类型的项,但是它的大小是固定的。一旦创建了一个包含x个元素的数组,它就不能增长或缩小。

IList定义了列表的接口,并且实现了IEnumerable。

List实现了IList接口;它是一个具体的列表类型。

.NET列表和数组的区别在于列表可以添加元素 - 它们可以增长到足够大以容纳所有所需的项。列表在内部使用数组来存储这些元素,当数组无法容纳所有元素时,会创建一个新的数组并将元素复制过去。

IList和数组都实现了IEnumerable。这就是接口的工作原理 - 类实现了合约,并以类似的方式行为,因此可以进行类似的处理(您知道类实现了IEnumerable,不需要知道其如何实现)。建议您阅读有关接口等内容的资料。

为那些不阅读所有答案的读者添加此评论:数组和List都实现了IList(数组大部分是显式实现,可能是因为许多成员会引发NotSupportedException异常)。更准确地说,IList继承自IEnumerable,而不是实现它。

0
0 Comments

IEnumerable和Array的区别在于,IEnumerable只提供了最基本的“可迭代”功能,可以遍历序列,但其他操作如计算元素数量或获取第n个元素则效率较低。而Array是一个固定大小的集合,可以随机访问(即可以通过索引进行访问)。

IList和List的区别在于,List是一个可变大小的集合,可以添加和删除元素,并且可以随机访问。而IList是一个接口,将列表功能(计数、添加、删除、索引访问)抽象出来,与具体的类(如List、BindingList、ObservableCollection等)分离。

根据stackoverflow上的回答,IEnumerable的Count方法几乎与ICollection的Count属性相同,因为它会尝试在ICollection上调用Count方法。Count扩展方法会检查IEnumerable是否也是ICollection,如果是,则调用其Count属性;如果不是,则回退到迭代序列的方式进行计数。因此,使用IEnumerable仅进行计数操作效率较低是因为它无法使用更高效的方法,但如果对象具有更高效的方法,仍然可以使用它们。

为了解决IEnumerable的计数效率低的问题,可以将其转换为其他集合类型,如List或Array,然后使用其相应的计数方法。例如,可以使用ToList()方法将IEnumerable转换为List,然后使用List的Count属性来计数。或者可以使用ToArray()方法将IEnumerable转换为Array,然后使用Array的Length属性来计数。

IEnumerable提供了最基本的迭代功能,而Array和List则提供了更丰富的功能,如随机访问、计数、添加和删除元素等。为了解决IEnumerable计数效率低的问题,可以将其转换为其他集合类型进行操作。

0