gpt4 book ai didi

.net - 我有 3 种方法来获取数组的 ubound

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:18 26 4
gpt4 key购买 nike

我有这 3 段代码:

 For x = 0 To sections.Length - 1
'work
Next
For x = 0 To UBound(sections)
'work
Next
For x = 0 To sections.GetUpperBound(0)
'work
Next

我已经考虑了大约 10 分钟,但我仍然无法确定一种选择相对于另一种选择的优势到底是什么。

我想知道是否有人真的考虑过这个问题并愿意分享他们的见解。基本上我想知道哪个“更好”(你可以引用清晰度、简单重构、性能、可维护性、良好标准,任何让它“更好”的东西)

最佳答案

我假设您需要在循环中使用索引 - 否则,只需使用 For Each 循环即可。

1 在我看来是一维数组的惯用方式。它最接近您在 C# 中看到的正常方式:

for (int x = 0; x < array.Length; x++)

不幸的是,如今 VB 在基于零还是基于一方面具有这种轻微的双重人格。 .NET 通常是一个零基础的平台,你在这里受苦;围绕从零开始的 API设计的语言可能会使“包含下限;独占上限”模式更简单——而 VB 在两端都包含,这就是为什么你需要“-1 ".

2 看起来像是 VB 特有的函数;我会尽量避免这些,除非它们具有显着优势,因为这会使非 VB 程序员(例如 C# 程序员)更难理解代码。在许多情况下,这只是一个非常小的问题,但当它没有真正的优势时,我会坚持使用“常规”.NET 方法。

3 实际上是为多维(矩形)数组设计的 - 0 表示您想要第一个 维度。当您处理一维数组时,它会无缘无故地增加额外的复杂性。

第一种方法可能也是最高性能的 - JIT 识别这种模式并且能够在循环中删除一些数组边界测试(它知道 x 在数组的边界内)。现在 UBound 可能 编译为具有相同属性的 IL - 我不确定。我怀疑它调用了 Microsoft.VisualBasic 程序集中的方法,而 JIT 不太可能知道该方法。

关于.net - 我有 3 种方法来获取数组的 ubound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com