Функция Len () против строки.Свойство длины; что выбрать?


Я делаю переход от VB6 к VB.Net (VS 2010) и имеют базовое, а не расширительное понимание последнего. У меня, очевидно, есть довольно много кода... Я не решаюсь использовать слово "обновить", когда "порт" было бы более подходящим, учитывая, что мастер обновления в прошлых версиях VS мог бы просто прокомментировать код и сказать: "Эй, почему бы вам не начать заново с нуля?"

В одной процедуре, которую я привожу через функцию Len(), была использована для определения длины строковой переменной. Это все еще работает в VB.Net (хотя я предполагаю, что это на самом деле вызов метода Strings.Len), но другой альтернативой является просто запрос свойства .Length переменной.

Вопрос в том, что использовать и почему. Я просмотрел соответствующие страницы MSDN, и все, что они, кажется, говорят мне, что метод/свойство существует. Ничего не говорится о проблемах производительности, особенно когда могут быть задействованы циклы большого количества вызовов.

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

5 15

5 ответов:

Потому что вы используете VB.NET, ваш Strings может быть Nothing, и если вы явно не проверите это, большинство методов VB, включая Len, будут рассматривать его так же, как String.Empty, т. е. "".

С отражателем вы можете видеть, что Len реализуется как нулевая проверка, возвращающая 0 для Nothing и в противном случае возвращающая .Length, и дрожание, вероятно, будет в строке вызова.

Итак, если вы используете другие методы VB, я бы предложил использовать Len тоже, если вы не знаете, что String не является Nothing или проверить на Nothing везде.

Итак, согласно это:

Len, еще одна классическая базовая функция, возвращает длину строки. Система.Строка имеет свойство Length, которое предоставляет ту же информацию. Разве одно лучше другого?

С точки зрения производительности, эти две функции показывают небольшую разницу по сравнению с 1000 итерациями. В этом случае нет никаких оснований предпочесть одно другому, плюс нет никакой функциональной разницы. Я отчасти неравнодушен к использованию собственности значение, а не функция VB, поскольку она поощряет думать о строках .NET как об объектах. Однако, по сути, это всего лишь личные предпочтения.

Если Вы доверяете их слову, то вот вам и ответ. В противном случае, кодирование теста и повторение должны дать вам окончательный ответ.

Я не уверен в специфике метода Len() (мой язык выбора-C#), но я бы сказал, что определенно пойду со свойством Length. Length является членом класса System.String, тогда как Len() - Нет.

Я предполагаю, что Len() - это просто прокладка VB поверх свойства Length. Кто-то, вероятно, может привести аргумент, что использование Len() более идиоматично с точки зрения VB. Я думаю, что предпочел бы использовать свойство, встроенное в класс, а не просто использовать другой механизм просто потому, что это предусмотрено языком.

В дополнение к сообщению @Andrew, Len() является Строковой функцией из библиотеки времени выполнения Visual Basic, где as Length является свойством класса System.String API .net framework.

Метод Len предусмотрен для обратной совместимости со старым VB6 (и более ранним) non-.NET код. Нет ничего технически неправильного в его использовании. Это сработает, и очень хорошо. Но, лучше использовать новый способ .NET делать вещи, когда это возможно. Помимо того, что вы больше погружаетесь в ".NET-мышление", единственное реальное ощутимое преимущество использования String.Length состоит в том, что это облегчает перенос кода на другие языки .NET в будущем.