Посмотрите на следующий код:Каким образом выполнение кода попадает внутрь этого оператора 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:
Когда я включаю cleanUrl.StartsWith("http://")
в «Immediate Window» моего отладчика, он возвращает ложь. Это то, чего я ожидал бы. Однако выполнение каким-то образом переходит в блок if, как если бы оно вернулось.
Может кто-нибудь объяснить, как это возможно?
Я бы не назвал это «решенным» ... вы не знаете, почему это произошло, или что это исправлено, вы просто отключили его и включили снова и выключили, включили и выключили, снова и снова. Я предполагаю, что вы включили оптимизацию, поэтому строка, выделенная отладчиком, не была точной. Золотой стандарт того, работает ли тело, - это напечатать что-то в этом теле и увидеть, что он был напечатан. –
Я делал модульное тестирование, и я предполагаю, что я обновил код, а затем нажал на тестовый жгут и проверил его. Мое предположение заключается в том, что Visual Studio не полностью обновляла информацию об отладке в соответствии с исходным кодом. После того, как пара очистит и перестроит, кажется, все в порядке. Код довольно прост, поэтому я не знаю, что еще может быть. Если у вас есть другие идеи, пожалуйста, дайте мне знать. Я был очень озадачен этим. Я просто рад, что больше не делаю этого. – Curtis