6

Я добавляю фрагмент кода для просмотра окна из кода во время выполнения, копируя его из кода и добавляя его в окно просмотра. Если код содержит такие методы, как Convert.ToString(), XMLDocument.Load(), File.Write() и т. Д. Пространства имен по умолчанию .NET, такие как System.IO, System.Xml и т. Д., Тогда он дает ошибку: Имя «Конвертировать» не существует в текущем контексте », но оно не дает ошибки, когда я добавляю полное пространство имен к добавленной части кода в окне просмотра, например: System.Convert.ToString (123) дает правильное значение. Код моей программы не имеет полного пространства имен до того, как какой-либо метод .NET Framework будет вызван в него, потому что, если я добавляю пространство имен перед вызовом любого метода, то что использовать добавление пространства имен поверх каждого файла с помощью «использования» ключевого слова. Если я добавлю пространство имен над кодом в файл, тогда мне не нужно добавлять целое пространство имен в код этого файла перед вызовом метода. Что я могу сделать, кроме добавления полного пространства имен в окне просмотра каждый раз, когда я копирую код в список часов, чтобы часы не выдавали ошибку. См. Скриншот ниже: enter image description hereДобавить часы без полного пространства имен в Visual Studio

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

+0

Я никогда не видел, чтобы окно наблюдения использовалось для метода, я обычно использую его для просмотра * значения * переменной – Sayse

+0

@Sayse. Как вы проверите результат метода до его выполнения, чтобы убедиться, что он не дает никаких ошибок или исключений при выполнении. Я поставил точку прерывания на код вызова этого метода и сначала добавил этот код в окно просмотра, чтобы проверить, есть ли какая-либо ошибка, иначе, если я этого не сделаю, мне нужно снова запустить всю программу, чтобы исправить следующее время. –

+0

Я стараюсь писать код, который не вызывает исключений, и если это так, то msdn имеет обширную документацию, которая обычно скажет мне, что я должен искать. Для отладки, как я уже сказал, просмотр переменных и точек останова. Я не говорю, что вы делаете неправильно, я просто не использую часы таким образом, мне кажется странным – Sayse

ответ

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

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

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

Смежные вопросы