Рейтинг блогов

Функция Split и метод Split, или грабли для VB-программиста

дата добавления: 31 октября 2008 / 08:42, просмотров: 25769, комментариев: 2
В далекие времена (ну очень далекие), при использовании метода Split в Visual Basic .NET, я столкнулся с непонятной проблемой, когда сей метод выдавал совсем не то, что я от него ожидал. Что именно он мне выдавал, и в чем заключалась суть проблемы я уже точно не помню, давно это было :) Тогда я особо не вникал в это дело, и просто использовал одноименную функцию Split, которая делала, то, что мне было нужно. А на метод Split, я со спокойной совестью, повешал ярлык: «Осторожно, баг», да еще и пытался убедить в этом «братьев по оружию» :) Это называется, решил проблему не вникая в ее суть. 

Сегодня, совершенно случайно, поймал логический баг по этой же теме. Суть бага заключалась в том, что в коде использовался метод Split, который должен был «сплитеть» по строке, т.е.:

Dim s As String = "это пример<сплит>раз два<сплит>три"
Dim a() As String = s.Split("<сплит>")


По задумке, в результате выполнения данного кода, переменная a() должна содержать строки:

a(0) = "это пример"
a(1) = "раз два"
a(2) = "три"

Однако, метод Split в качестве параметра ждет массив символов, но не строку! Если дать ему строку, то используется только первый символ из этой строки, и результатом выполнения выше указанного кода будет:

a(0) = "это пример"
a(1) = "сплит>раз два"
a(2) = "сплит>три"

Казалось бы, мелочь, но эта мелочь в больших проектах может стать довольно серьезной проблемой. Мне, например, пришлось несколько брейкпоинтов потратить, чтобы добраться до этого «зверя».

В данном случае, использование VB-функции Split даст желаемый результат:

Dim s As String = "это пример<сплит>раз два<сплит>три"
Dim a() As String = Split(s, "<сплит>")
'a(0) = "это пример"
'a(1) = "раз два"
'a(2) = "три"

Или же можно использовать функцию Split класса Regex:

Dim a() As String = Regex.Split(s, "\<сплит\>")

Тем, кто работает с C#, подобный баг не грозит, и может даже показаться смешным, ибо в шарпе все очевидно и компилятор не позволит засовывать в метод Split тип данных String. Ну а Бэйски, Бэйсик как всегда молчит, зачем зря хозяина по пустякам беспокоить :) Хотя его можно вразумить, включив опцию Option Strict On, но, имхо, тогда уж лучше C#.

Комментарии (всего: 2)

Добавить комментарий rss
Автор: Aerelornee @ 06 декабря 2008, 00:14   ·   ссылка
Хотя его можно вразумить, включив опцию Option Strict On, но, имхо, тогда уж лучше C#.

Пишу на VB. Option Strict всегда держу включённым :)
Автор: RandyMix @ 14 февраля 2017, 09:21   ·   ссылка
Lose up to 23 pounds of pure body fat in just 3 weeks!, how did i do that?
The 3 Week Diet is an extreme rapid weight loss program that can help you lose up to 23 pounds of pure body fat in just 3 weeks! Get your customized diet plan from our official website and find out which foods you should be eating if you want to burn your belly fat away fast! Created by acclaimed personal trainer and nutritionist Brian Flatt, The 3 Week Diet is 100% guaranteed to deliver results!
look great? dont waste your time! lets do this, join with us and bet back your beautiful body at here:

http://tinyurl.com/jblsnuj

Thx

Добавить комментарий

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учётная запись на этом сайте, пройдите процудуру авторизации.
В противном случае, зарегистрируйтесь на сайте.