Неизменяемые строки Dot Net - PullRequest
3 голосов
/ 29 мая 2010

Я обычно определяю свои строковые переменные в vb.net как

Dim f_sName as string=String.Empty
f_sName = "foo"

Учитывая неизменный характер строк в .net, существует ли лучший способ инициализации строк и использования «переменной« f_sName »до того, как ей было присвоено значение. Во время выполнения может возникнуть исключение нулевой ссылки». предупреждение?

Также для классов, которые не имеют конструкторов, которые не принимают аргументов, таких как System.Net.Sockets.NetworkStream, каков наилучший способ определить и инициализировать переменную этого типа?

Ответы [ 3 ]

3 голосов
/ 29 мая 2010

Это не имеет ничего общего с неизменяемостью строк.

A лучше предпочтительным шаблоном будет

 Dim f_sName as string = "Foo"

Но это зависит от ситуации, если вы можете использовать это.

То же самое для инициализации с помощью Nothing или Empty. Если вы хотите отлавливать ошибки раньше, тогда:

  1. просто вообще не инициализировать . «Переменная« xxx »используется до того, как ей присвоено значение» - это ваш друг, а не враг.
  2. Инициализировать с помощью Nothing. Это также может выявить ошибки.
  3. Инициализировать с пустым (или просто "", без разницы).

Что касается классов, таких как NetworkStream, то же самое: не создавайте экземпляры и не объявляйте переменные, пока они вам не понадобятся. Для класса Disposable, такого как NetworkStream, это означает использование предложения Using:

 Using fs As New NetworkStream(....)

 End Using

Желательно и бесполезно иметь «fs» вне этой узкой области.

1 голос
/ 29 мая 2010
Dim f_sName as String = Nothing

или

Dim f_sName As New String()

Кстати: смешивание mixedCase именования переменных с underscores (как в f_sName) в большинстве случаев выглядит странно, что означает это имя переменной?

1 голос
/ 29 мая 2010

Инициализация строки в null и в String.Empty - это почти одно и то же. Лично я думаю, что установка его в string.empty действительно лучший способ справиться с этим. Установка его в null приведет к выбрасыванию исключений со ссылками null, хотя в случае установки его в String.Empty не будет.

Можно утверждать о достоинствах инициализации его одним из двух способов, но с точки зрения оптимизации нет заметной разницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...