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

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

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

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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Недавно я столкнулся с проблемой с моим старым кодом VB.Net, который использовал функцию Len(). Я обновил свой проект до Core, который ссылался на старый файл DLL VB.net, и он использовал функцию Len(). Я получил ошибку совместимости во время выполнения - метод не найден: 'Int32 Microsoft.VisualBasic.Strings.Len(System.String)'

Я должен изменить все такие старые функции, которые Core устарел. Поэтому я поддерживаю String.Length над Len(), как предложил Стивен Доггарт.

Другие вопросы по тегам