2009-10-22 6 views
10

Каков наилучший способ взять массив в VB.NET, который может быть либо ничем, ни инициализирован, и дать ему длину нуля?Каков рекомендуемый способ создания пустого массива в VB.NET?

три варианта я могу думать о том, являются:

ReDim oBytes(-1) 

oBytes = New Byte(-1) {} 

oBytes = New Byte() {} 

Первый пример того, что большинство разработчиков в моей компании (мы использовали, чтобы сделать VB 6) всегда используется. Я лично предпочитаю третий пример, так как проще всего понять, что происходит.

Итак, каковы положительные и отрицательные для каждого подхода (варианты 2 и 3 очень похожи, я знаю)?


EDIT
Так кто-нибудь знает причины, чтобы избежать ReDim другого, потому что это является пережитком дни VB?

Не то, чтобы я не принимал это как ответ, если это все, что у кого есть!

+0

Ответ отредактирован, чтобы предоставить дополнительные основания для его устранения –

ответ

11

Я рекомендую: oBytes = New Byte() {}

Вы должны стараться избегать «классических VB-измы», как Redim и другие пережитки из классических VB дней. Я бы порекомендовал третий вариант.

Редактировать

Чтобы предоставить больше информации о том, почему, чтобы избежать этого, см this MSDN page. В то время как страница не рекомендует конкретно против этого, вы можете видеть, что Redim страдает от недостатков (и потенциального путаницы), которых нет в другом синтаксисе.

  1. Redim может быть использован только на существующих массивов. Тем не менее, семантически эквивалентно объявлению массива new. Redim выпускает старый массив и создает новый (так что это не так, как если бы Redim имеет возможность «приклеивать» или «отбивать» элементы). Кроме того, он является разрушительным, если не используется ключевое слово Preserve, хотя визуальная индикация о том, что присвоение имеет место, отсутствует.
  2. Поскольку Redim не может создать массив (но может работать только с существующими массивами), его можно использовать только в рамках процедуры; на уровне класса вы вынуждены использовать метод New Byte() {}, оставив вам два визуально разных шаблона для назначения новых массивов, хотя они семантически идентичны.
+0

Да, я согласен, вот что вызвало этот вопрос, я стараюсь удалить старый код VB везде, где я его найду! – stevehipwell

+2

Я больше не мог согласиться. «ReDim» и «New Byte (-1)» просто посмотрите НЕПРАВИЛЬНО. На мой взгляд, похоже, что он говорит ReDim oBytes (от -1 до 0), который, похоже, должен дать массив из двух элементов (что будет в Vb6). Пожалуйста, пожалуйста, ПОЖАЛУЙСТА, не может ли мир просто претендовать на участие в VB перед VB.net? Пожалуйста? –

+0

@Binary Worrier - 100% с вами на этом! Это причина большинства проблем с удобством VB.NET! – stevehipwell

Смежные вопросы