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

Я добавляю фрагмент кода в окно просмотра из кода во время выполнения, копируя его из кода и добавляя его в окно просмотра. Если код содержит такой метод, как Convert.Метод ToString(), Метод XmlDocument.загрузить файл.Записать() и т. д. пространства имен .NET по умолчанию, таких как System.ИО, система.XML и т. д., затем он дает ошибку: "имя " Convert" не существует в текущем контексте", но оно не дает ошибки, когда я добавляю полное пространство имен к добавленному фрагменту кода в окне просмотра, например: Система.Конвертировать.ToString (123) дает правильное значение. Код моей программы не имеет полного пространства имен перед вызовом метода .NET framework, потому что если я добавляю пространство имен перед вызовом любого метода, то какой смысл добавлять пространство имен поверх каждого файла с помощью ключевого слова "using". Если я добавляю пространство имен над кодом в файле, мне не нужно добавлять все пространство имен в код этого файла перед вызовом метода. Что я могу сделать, кроме добавления полного пространства имен в окне просмотра каждый раз, когда я копирую код к списку наблюдения, так что часы не дают ошибку. Пожалуйста, смотрите скриншот ниже: enter image description here

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

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-файл я могу скопировать выражения Convert в окно watch без классификатора пространства имен System, и они будут оцениваться. Если я шагаю в (или runt к точке останова) в моем конструкторе Foo (), я получаю ошибку "имя" Convert "не существует в текущем контексте", если я не добавлю квалификатор пространства имен System в начало.

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

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