Ниже приведен небольшой фрагмент, взятый из довольно большого приложения, чтобы упростить мой вопрос. Я задавал этот вопрос раньше, но моя плохая формулировка привела к его закрытию, прежде чем я смог отредактировать свой вопрос.
Это текущий фрагмент, к которому я добавил несколько строк журнала.
int i = 0;
Console.WriteLine("Before brackets");
if (i < 0)
{
Console.WriteLine("Inside brackets");
return MyArray[i];
}
Когда я отлаживаю с VS, я вижу:
i set to 0
if evaluates as false (when I hover over it in VS)
In Output: Before brackets
Затем шаги отладчика в заключаются в скобки, и return MyArray[i]
выполняется, однако я не вижу Inside brackets
в выходных данных к тому времени, как я прошел к строке return MyArray[i]
.
Такое поведение явно (для меня) неверно, и я подумал, не сталкивался ли кто-нибудь еще с чем-то подобным.
Я на 64-битной машине с Windows XP, с VS10 и .Net4.0.
Луна
ADDITIONAL1
Хенк попросил меня предоставить "консольное приложение", которое я сделал ниже. ОДНАКО, как я подозреваю, это НЕ ПОКАЗЫВАЕТ проблему. Я верю, что есть что-то еще (темы?), Вызывающее у меня проблему в моем реальном приложении - и я, очевидно, могу опубликовать это. Я понимаю, что я не даю вам четко определенную проблему - если бы я мог, я бы. Вот почему я задаю этот вопрос - если он поражает кого-то подобным. Для хорошего заказа, вот консольная версия, которая НЕ представляет проблему. Я чувствую, что надев это здесь, добавит путаницы ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApplication2
{
class Program
{
static string[] Mods = new string[] { "Cat", "Dog", "Geek" };
static void Main(string[] args)
{
string t = "Geek";
Console.WriteLine("Answer: " + FindD(t));
}
public static string FindD(string ModelFullName)
{
int ix = Array.IndexOf<string>(Mods, ModelFullName);
Console.WriteLine("ix: " + ix + " = " + (ix < 0).ToString());
if (ix < 0)
{
Console.WriteLine("2ix: " + ix + " = " + (ix < 0).ToString());
Error.Process(ErrorLevel.Critical, "ModelName not found: " + ModelFullName);
}
try
{
return Mods[ix];
}
catch (Exception)
{
Error.Process(ErrorLevel.Critical, "Could not point to Mod for: " + ModelFullName);
}
return null;
}
enum ErrorLevel { Note, Critical };
class Error
{
public static void Process(ErrorLevel EL, string message)
{
if (EL == ErrorLevel.Critical)
{
throw new Exception("Critical error: " + GetStackTrace() + message);
}
}
public static string GetStackTrace()
{
StackTrace stackTrace = new StackTrace(); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
string st = "";
// write call stack method names
for (int i = 6; i > 1; i--)
{
StackFrame stackFrame = stackFrames[i];
st = st + stackFrame.GetMethod().Name + "/";
}
return st;
}
}
}
}
ДОПОЛНИТЕЛЬНО 2
Похоже, моя проблема не в том, что путь выполнения идет по неверному маршруту ТОЛЬКО против отладчика. то есть кажется, что я иду в скобках, потому что отладчик выполняет последний оператор, но результаты, которые я на самом деле получаю, кажутся правильными.