2016-11-01 3 views

ответ

0

Поскольку InStr возвращает индекс первого появления строки поиска в строке, которая выполняется поиск. Индекс является 1-основанием, а когда строка не найдена, возвращаемый индекс является нижним (строка как массив символов) - 1 = 1 - 1 = 0. Это находится в VB, в C# f.e. он будет 0 - 1 = -1.

Когда вы используете InStr для определения того, найден ли строка, вам нужен логический результат, и для его использования вы используете сравнение> 0, которое возвращает True при обнаружении строки и False в противном случае.

Но, поскольку существует неявное преобразование между булевым и int, вы можете использовать InStr напрямую, а возвращаемое значение 0 (не найдено) будет преобразовано в False, а любое ненулевое значение (найдено) будет преобразовано в Правда.

Хотя это правильно и работает, этот способ менее очевиден, и, взглянув на код =InStr(...), вы не можете быстро сказать, нужен ли реальный индекс (целочисленный) или тот факт, что этот индекс существует (булево). Наконец, все о читаемости кода и ремонтопригодности, не забывайте, что неявные преобразования (особенно в не-отлаживаемый код SSRS) могут вызвать множество проблем.

+0

Большое спасибо @grafgenerator – Catwoman

+0

@vina приветствуется :) – grafgenerator

Смежные вопросы