jorge Asked: 2020-08-10 10:44:38 +0800 CST 2020-08-10 10:44:38 +0800 CST 2020-08-10 10:44:38 +0800 CST C# 中的 Count() 方法有什么作用? 772 我的理解是,当我遍历一个向量时,我会使用length,但我看到他们也使用Count(). 它有什么用,有什么区别? 例如: for(int i = 0; i < vector.Count(); i++) { } c# 4 Answers Voted Carlos Muñoz 2020-08-10T13:48:03+08:002020-08-10T13:48:03+08:00 如果通过向量你的意思是Array .Length .Length是一个属性,它指的是数组的长度,即内存已分离Array<T>出多少个该类型的对象。T .Count() .Count()是IEnumerable<T>(Array implements IEnumerable<T>)的 LINQ 扩展方法 它是一种根据底层类型以各种方式获取元素数量的方法,通常通过获取枚举器并迭代到末尾IEnumerable<T>(有例外) 这种形式相当于调用 Enumerable.Count(a) 要知道在哪种情况下应该使用这两者中的哪一个,让我们看看编译器生成了什么。 例如以下代码: var array = new []{ 1, 2, 3 }; var count1 = array.Count(); var count2 = Enumerable.Count(array); CIL编译器在 LINQPad 中生成以下代码: 如您所见,count1和count2都使用调用System.Linq.Enumerable.Count<Int32>. 这表明表达式是等价的。 但是,如果我们使用.Length var array = new []{ 1, 2, 3 }; var length = array.Length; 生成以下代码: 在其中我们甚至看不到对的调用,.Length但它已经存在于访问获取数组元素数量的CIL操作中,这是一种优化。ldlen 如果是List<T> List 没有属性,但除了扩展方法之外,Length它还有一个属性。CountCount() 对于以下代码 var list = new List<int> { 1, 2, 3}; var count1 = list.Count; var count2 = list.Count(); 生成以下内容: 这里发生了一些有趣的事情,正如我们在第一次调用属性时看到的那样Count(getter)Count,get_Count而对扩展方法的调用与调用方法的Count()情况相同Array<T>System.Linq.Enumerable.Count<Int32> 通常,当您拥有可用属性Length或Count使用List<T>它时可以看出,因为这将是访问元素的最快方式。如果没有这样的属性,那么使用Count()which 适用于任何IEnumerable<T> Shassain 2020-08-10T11:16:48+08:002020-08-10T11:16:48+08:00 注意:这是gbjbaanb对集合中问题计数与长度与大小的回答的翻译 Length()往往指的是连续的元素——String例如,一个 string() 有一个长度。 Count()倾向于指集合中元素的数量。 Size()往往是指集合的大小,通常这可能不同于length向量(或字符串)等情况下的长度(项目数。 Capacity()用于专门指在集合中分配的空间,而不是指集合中有效元素的数量。如果一个数据类型定义了容量 x和大小 y,那么大小通常是指实际元素的数量。 我认为重点是人类语言和习语,字符串的大小似乎不是很明显,而集合的长度同样令人困惑,尽管它可以用来指代相同的事物(元素的数量)数据的集合。 Phi 2020-08-10T12:57:15+08:002020-08-10T12:57:15+08:00 我假设当您说vector您指的是一个List<T>或一个Array. 答案是没有区别,因为它们都获得了序列中元素的数量。在 a 的情况下Array,您可以使用该方法Count(),因为它是一个 Linq 扩展方法并且它也是一个可迭代对象。 在这些页面上,您可以找到属性Length和方法的官方文档Count()(英文)。 Best Answer mlvictor 2020-08-10T14:44:25+08:002020-08-10T14:44:25+08:00 将集合用作列表或向量时,获取集合大小的方法是 Count()。另一方面,当我们处理数组或文本字符串时,使用的方法是Length(),它只是取决于是集合还是数组,但都返回大小。
如果通过向量你的意思是
Array
.Length
是一个属性,它指的是数组的长度,即内存已分离Array<T>
出多少个该类型的对象。T
.Count()
是IEnumerable<T>
(Array implementsIEnumerable<T>
)的 LINQ 扩展方法它是一种根据底层类型以各种方式获取元素数量的方法,通常通过获取枚举器并迭代到末尾
IEnumerable<T>
(有例外)这种形式相当于调用
要知道在哪种情况下应该使用这两者中的哪一个,让我们看看编译器生成了什么。
例如以下代码:
CIL
编译器在 LINQPad 中生成以下代码:如您所见,
count1
和count2
都使用调用System.Linq.Enumerable.Count<Int32>
. 这表明表达式是等价的。但是,如果我们使用
.Length
生成以下代码:
在其中我们甚至看不到对的调用,
.Length
但它已经存在于访问获取数组元素数量的CIL
操作中,这是一种优化。ldlen
如果是
List<T>
List 没有属性,但除了扩展方法之外,
Length
它还有一个属性。Count
Count()
对于以下代码
生成以下内容:
这里发生了一些有趣的事情,正如我们在第一次调用属性时看到的那样
Count
(getter
)Count
,get_Count
而对扩展方法的调用与调用方法的Count()
情况相同Array<T>
System.Linq.Enumerable.Count<Int32>
通常,当您拥有可用属性
Length
或Count
使用List<T>
它时可以看出,因为这将是访问元素的最快方式。如果没有这样的属性,那么使用Count()
which 适用于任何IEnumerable<T>
Length()
往往指的是连续的元素——String
例如,一个 string() 有一个长度。Count()
倾向于指集合中元素的数量。Size()
往往是指集合的大小,通常这可能不同于length
向量(或字符串)等情况下的长度(项目数。Capacity()
用于专门指在集合中分配的空间,而不是指集合中有效元素的数量。如果一个数据类型定义了容量 x和大小 y,那么大小通常是指实际元素的数量。我认为重点是人类语言和习语,字符串的大小似乎不是很明显,而集合的长度同样令人困惑,尽管它可以用来指代相同的事物(元素的数量)数据的集合。
我假设当您说
vector
您指的是一个List<T>
或一个Array
.答案是没有区别,因为它们都获得了序列中元素的数量。在 a 的情况下
Array
,您可以使用该方法Count()
,因为它是一个 Linq 扩展方法并且它也是一个可迭代对象。在这些页面上,您可以找到属性
Length
和方法的官方文档Count()
(英文)。将集合用作列表或向量时,获取集合大小的方法是 Count()。另一方面,当我们处理数组或文本字符串时,使用的方法是Length(),它只是取决于是集合还是数组,但都返回大小。