2014-11-18 10 views
1

Посмотрите на следующий код:Каким образом выполнение кода попадает внутрь этого оператора if?

public static string GetCleanURL(string baseURL, string url) 
    { 
     string cleanUrl = url.ToLower(); 
     if (cleanUrl.StartsWith("http://")) 
     {//It already starts with http:// It is already in the correct form return it. 
      return cleanUrl; 
     } 

'URL' значение, передаваемое в это "123.123.123.123:1234/myurl/withstuff.xml". В выражении 'if' значение для 'cleanUrl' равно "123.123.123.123:1234/myurl/withstuff.xml". Но по какой-то причине выполнение кода выходит из блока if и возвращает returnUrl; выполняется.

Вот скриншот текущего значения для «» cleanUrl:

enter image description here

Когда я включаю cleanUrl.StartsWith("http://") в «Immediate Window» моего отладчика, он возвращает ложь. Это то, чего я ожидал бы. Однако выполнение каким-то образом переходит в блок if, как если бы оно вернулось.

Может кто-нибудь объяснить, как это возможно?

ответ

2

РЕШИТЬ !!!

Я ценю тех из вас, кто помог мне на этом.

Мне нужно было очистить и перестроить проект и закрыть и повторно открыть Visual Studio 2013 около 4 раз, прежде чем база кода и отладочная информация были фактически синхронизированы. Теперь он работает правильно.

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

Итак, друзья, если когда-либо вы находите свой код, он просто сумасшедший и не делает того, что он должен делать. Просто поймите, что никто в здравом уме никогда не станет программистом. Затем сделайте очистку/перестройку несколько раз и молитесь, чтобы странность ушла, чтобы не вернуться.

Спасибо за вашу помощь по этому вопросу.

Я люблю борьбу с инструментами разработки ...

+0

Я бы не назвал это «решенным» ... вы не знаете, почему это произошло, или что это исправлено, вы просто отключили его и включили снова и выключили, включили и выключили, снова и снова. Я предполагаю, что вы включили оптимизацию, поэтому строка, выделенная отладчиком, не была точной. Золотой стандарт того, работает ли тело, - это напечатать что-то в этом теле и увидеть, что он был напечатан. –

+0

Я делал модульное тестирование, и я предполагаю, что я обновил код, а затем нажал на тестовый жгут и проверил его. Мое предположение заключается в том, что Visual Studio не полностью обновляла информацию об отладке в соответствии с исходным кодом. После того, как пара очистит и перестроит, кажется, все в порядке. Код довольно прост, поэтому я не знаю, что еще может быть. Если у вас есть другие идеи, пожалуйста, дайте мне знать. Я был очень озадачен этим. Я просто рад, что больше не делаю этого. – Curtis

1

Нет, StartWith не работает и работает должным образом.

Попробуйте минимальный код ниже. Сократите свой код до минимальной суммы, чтобы повторить проблему. Это происходит каждый раз? Это происходит с более чем одной строкой кандидата? Или только эта строка?

Что-то еще происходит извините, следующий пишет Doesn't start

static void Main(string[] args) 
    { 
     string cleanUrl = "123.123.123.123:1234/SomeFile.xml"; 
     if (cleanUrl.StartsWith("http://")) 
      Console.WriteLine("Starts"); 
     else 
      Console.WriteLine("Doesn't start"); 
     Console.ReadLine(); 
    } 
+6

Люди приходят к вам и говорит, что у него есть проблемы, и вместо того, чтобы решить ее вы скажете ему, что у него нет проблем. – SimpleVar

+4

Фактически он говорит, что воспринимаемая проблема не является реальной проблемой. – TaW

+0

Эти ответы кажутся ненужными, так как каждый может видеть, что «123.12 ...» не начинается с «http: //» и что проблема действительно в другом месте. – Magnus