6

我添加代码的作品从代码在运行时由代码复制它,将它添加到Watch窗口来观察窗口。如果代码包含像Convert.ToString(),XMLDocument.load方法(),File.Write()NET的默认名称空间,如System.IO,的System.Xml等等的方法,则它给出了一个错误:“名称'Convert'在当前上下文中不存在“,但是当我将完整的名称空间添加到监视窗口中添加的代码段时,它不会给出错误,如:System.Convert.ToString(123)给出正确的值。我的程序的代码在调用.NET的框架方法之前没有完整的名称空间,因为如果我在任何方法调用之前添加名称空间,那么使用“using”关键字在每个文件的顶部添加名称空间有什么用处。如果我在文件中的代码上面添加一个名称空间,那么在该方法调用之前,我不必在该文件的代码中添加整个名称空间。每次将代码复制到监视列表中,除了在监视窗口中添加完整的名称空间外,我还能做什么,以便手表不会出错。请参阅以下屏幕截图: enter image description here不完整的命名空间添加的手表在Visual Studio

更新:我在监视列表中添加方法以检查方法执行之前的结果。它确保方法执行不会在执行时给出任何错误或异常,并且我可以编辑代码,因为该方法在程序的代码执行过程中并未实际执行。我在该方法的调用代码上放置了一个断点,并首先将该代码添加到监视窗口中,以检查是否有任何错误,因为如果我不这样做,那么我必须重新运行整个程序以修正下一个值时间。

+0

我从来没有见过的监视窗口中使用一种方法,我通常用它来观看的*值*变量 – Sayse

+0

@Sayse的您将如何执行,以确保它才检查方法的结果在执行时不会给出任何错误或异常。我在该方法的调用代码上放置了一个断点,并首先将该代码添加到监视窗口中以检查是否有任何错误,否则,如果我不这样做,那么我必须重新运行整个程序以更正下一个值时间。 –

+0

我倾向于尝试编写不会导致异常的代码,如果它确实存在,那么msdn会有大量的文档,这些文档通常会告诉我应该查找哪些内容。对于调试,就像我说的,观察变量和断点。我不是说你在做什么是错的,我只是不使用这种方式,它似乎很奇怪的手表给我 – Sayse

回答

1

调试器使用,其中电流指令指针是上下文(在源窗口的左边的小黄色箭头)来尝试评估函数。

所以,如果你在哪里停止了代码行“使用系统;”在文件顶部,你应该能够在监视窗口中输入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任何点文件,我可以复制转换表达式监视窗口,而不System命名空间预选赛,他们将评估。如果我在我的Foo()构造函数中进入(或破坏到一个断点),我会得到“The name'Convert'在当前上下文中不存在”错误,除非我将System名称空间限定符添加到开头。

注意:即使可以评估表达式,您最终也不得不频繁地点击刷新按钮(观察窗口右边的一个圆圈中的两个箭头),因为调试器无法分辨是否有呼叫进入CLR会导致副作用。

希望有所帮助。

相关问题