首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"asdf".Length >0与"asdf".Any()?

"asdf".Length >0与"asdf".Any()?
EN

Stack Overflow用户
提问于 2010-08-11 10:56:35
回答 2查看 140关注 0票数 1

如何通过内部变量(例如m_Length)标识数组的Length属性,否则它将枚举数组的所有项。

如果我想检查一个数组是否包含任何元素,就会出现这种差异。

代码语言:javascript
复制
Dim asdf = { "a"c, "s"c, "d"c, "f"c }
Dim any = asdf.Any()
Dim any2 = asdf.Length > 0

(还要注意,Any是一种扩展方法,我希望考虑调用内部get_Length与调用ex的性能比较。方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-11 11:03:44

代码中的asdf变量不是数组,而是一个String。碰巧String有一个Length属性并实现了IEnumerable<char>,它允许您调用Any()

尽管如此,为了回答您的实际问题,确定数组的长度不需要枚举;长度作为数组的一部分存储。

从技术上讲,使用Length将比调用Any()更快(因为这必须为数组创建枚举器,然后调用MoveNext一次),尽管差异可能可以忽略不计。不过,检查Length变量更符合惯例。

票数 7
EN

Stack Overflow用户

发布于 2010-08-11 11:01:08

array.Length是一个属性,是一个O(1)运算。数组的长度在创建时是已知的,因此在访问length属性时没有理由枚举整个数组。Any()应该相当快,如果集合类型可以更改为任何其他IEnumerable<T>,那么它肯定很有用,但长度不会对性能造成影响。

此外,您的特定示例使用的是字符串而不是数组,但消息是相同的。字符串的长度在创建时是已知的,因此当您访问该属性时,Length不需要枚举字符串中的字符。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3454960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档