问题 在VB.NET中建立空数组的建议方法是什么?


在VB.NET中获取数组的最佳方法是什么,可以是Nothing或初始化并给它一个零长度?

我能想到的三个选择是:

ReDim oBytes(-1)

oBytes = New Byte(-1) {}

oBytes = New Byte() {}

第一个例子是我公司的大多数开发人员(我们以前做VB 6)一直使用的。我个人更喜欢第三个例子,因为它最容易理解发生了什么。

那么每种方法的积极和消极是什么(我知道选项2和3非常相似)?


编辑
所以有人都知道要避免的理由 ReDim 另外因为它是VB日的延续?

并非我不会接受这个答案,如果这是所有人都有的!


12329
2017-10-22 14:55


起源

编辑答案以提供避免它的额外理由 - Adam Robinson


答案:


我建议: oBytes = New Byte() {}

你应该尽量避免使用“经典的VB-isms” Redim和其他经典VB时代的遗产。我会推荐第三种选择。

编辑

要提供有关为何避免它的更多信息,请参阅 这个MSDN页面。虽然该页面没有特别建议反对它,你可以看到 Redim 遭受其他语法没有的缺点(以及混淆的可能性)。

  1. Redim 只能用于 现有 阵列。即便如此,它在语义上等同于声明a new 阵列。 Redim 释放旧数组并创建一个新数组(因此它不像 Redim 有能力“坚持”或“砍掉”元素)。此外,它是破坏性的,除非 Preserve 即使没有可视指示正在进行分配,也会使用关键字。
  2. 因为 Redim 无法创建数组(但只能在现有数组上工作),它只能在一个过程中使用;在班级你被迫使用 New Byte() {} 方法,留下两个视觉上不同的模式来分配新数组,即使它们在语义上是相同的。

12
2017-10-22 14:57



是的我同意,这就是引发这个问题的原因,我倾向于删除旧的VB代码,无论我在哪里找到它! - stevehipwell
我完全赞同。 “ReDim”和“New Byte(-1)”看起来很糟糕。在我看来它看起来像是在说ReDim oBytes(-1到0),它看起来应该给出两个元素的数组(它将在Vb6中)。请,请不要这个世界只是假装在VB.net之前没有VB?请? - Binary Worrier
@Binary Worrier - 100%与您同在!这就是大多数VB.NET可用性问题的原因! - stevehipwell
@AdamRobinson太棒了。我也完全同意。但是,如何让你的空阵列增长?用一个 List 你转换成 Array 每次?这是你的数组不可变的方法。问题是:你总是想要它吗?在执行过程任务之前,您无法始终知道数组的大小。即使你可以,在大多数情况下,由于你的尺寸预检,性能也不会提高。换一种说法: push, pop, switch, unswitch 应该是本机类的方法 Array。怎么可能这可能是向后不兼容或影响性能? - rellampec