Добавление часов без полного пространства имен в Visual Studio


Я добавляю фрагмент кода в окно просмотра из кода во время выполнения, копируя его из кода и добавляя его в окно просмотра. Если код содержит метод типа Convert.ToString (), XMLDocument.загрузить файл.Записать() и т. д. из пространства имен .NET по умолчанию, таких как System.IO, система.XML и т. д., то он выдает ошибку: "имя ' Convert' не существует в текущем контексте", но он не выдает ошибку, когда я добавляю полное пространство имен к добавленному фрагменту кода в окне просмотра, например: Система.Преобразовать.ToString (123) дает правильное значение. Код моей программы не имеет полного пространства имен перед любым методом .NET framework, вызываемым в нем, потому что если я добавляю пространство имен перед вызовом любого метода, то какой смысл добавлять пространство имен поверх каждого файла с помощью ключевого слова "using". Если я добавляю пространство имен над кодом в файле, то мне не нужно добавлять целое пространство имен в код этого файла перед вызовом метода. Что я могу сделать, кроме добавления полного пространства имен в окно просмотра каждый раз, когда я копирую код к списку наблюдения, так что часы не дают ошибки. Смотрите скриншот ниже: Введите описание изображения здесь

Update: я добавляю метод в список наблюдения, чтобы проверить результат метода перед его выполнением. Это гарантирует, что выполнение метода не даст никаких ошибок или исключений при выполнении, и я могу редактировать код, потому что метод фактически не был выполнен в выполнении кода программы. Я ставлю точку останова на вызывающем коде этого метода и добавляю этот код в окне просмотра сначала к проверьте, нет ли ошибки, потому что если я этого не сделаю, то мне придется снова запустить всю программу, чтобы исправить значение в следующий раз.

1 6

1 ответ:

Отладчик использует контекст, в котором находится указатель текущей инструкции (маленькая желтая стрелка слева от исходного окна), чтобы попытаться оценить функцию.

Поэтому, если строка кода, в которой вы остановились, имеет "using System;" в верхней части файла, вы должны иметь возможность ввести Convert.ToInt32 (123) в окно наблюдения. Если вы находитесь в другом файле, который не имеет этого использования, вам придется полностью квалифицировать имя.

Я попробовал это со следующим тестом корпус:

// Main.cs
using System;
namespace TestCon
{
    class Program
    {
        static void Main(string[] args)
        {
            Foo foo = new Foo();

            Console.WriteLine(Convert.ToString(123));
            Console.WriteLine(Convert.ToInt32("234"));
        }
    }
}

//Foo.cs (note that there are no using statements in this file)
namespace TestCon
{
    class Foo
    {
       public Foo()
       { }
    }  
}

Если я шагну к какой-либо точке в main.cs file я могу скопировать выражения Convert в окно watch без квалификатора пространства имен System, и они будут оцениваться. Если я шагаю в (или бегу к точке останова) в моем конструкторе Foo (), я получаю ошибку "имя 'Convert' не существует в текущем контексте", если я не добавлю в начало квалификатор пространства имен System.

Примечание: даже когда выражение может быть вычислено, вам в конечном итоге придется нажать кнопку обновить (два стрелки в круге справа от окна наблюдения) часто потому, что отладчик не может сказать, вызовет ли вызов среды CLR побочные эффекты.

Надеюсь, это поможет.