Функция 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(), как предложил Стивен Доггарт.