【问题标题】:VS Immediate Window - The name does not exist in the current contextVS 立即窗口 - 当前上下文中不存在该名称
【发布时间】:2013-02-05 04:49:53
【问题描述】:

我遇到了这个问题,它在代码的某些部分一直困扰着我,我不知道是什么原因造成的。

我有一个设置断点的代码块。如果我随后使用光标并将鼠标悬停在变量上,我通常可以浏览该变量的内容和值。

而有些变量,我看不到内容,什么也没有出现。

另外,如果我尝试通过即时窗口调查那些我无法调查的内容,它会告诉我The name 'temp' does not exist in the current context

我真的很生气为什么会发生这种情况,一些整数而不是其他整数,一些类对象但不是同一类型的其他对象。

关闭 Visual Studio 并重新启动并不能解决问题。

我在调试中运行,没有优化。

只是在这个问题上寻求一些帮助,所以在此先感谢。

这里是它出现的代码示例,没有特殊代码或委托。即使只有几行代码,它也可能发生在程序的随机部分。

segs2D = ConvertSegmentsTo3DLines(segs2D);
IList<DSegment2D> segs3D = DSegment2D.Duplicate(segs2D);
TransformSegments(segs3D, transform);
foreach (var seg in segs3D)
    MoveSegmentToSolid(seg, moveNormal, solid, false);

Dictionary<double, Strategy> strategiesDic = new Dictionary<double, Strategy>();

double d1 = (double)(segs3D[0].GetP1Tag() ?? 0);
double d2= (double)(segs3D[0].GetP2Tag() ?? 0);
foreach (DSegment2D seg in segs3D)
{
    d1= (double)(seg.GetP1Tag() ?? d1);
    d2= (double)(seg.GetP2Tag() ?? d2);
    ...Stuff
}

【问题讨论】:

  • 如果您可以发布一些展示该行为的代码示例,这可能会有所帮助。
  • @AndrewCooper 代码已添加。
  • And ... 当前断点在哪里。哪些变量你能看到,哪些你看不到?
  • @AndrewCooper 断点可以位于此代码和其他代码中的任何位置。该函数较长(约 400 行),这部分代码在大约 3 个循环内。它也发生在程序的其他部分,只有几行代码。

标签: c# .net visual-studio visual-studio-2008


【解决方案1】:

另外,如果我尝试通过即时窗口调查那些我无法调查的内容,它会告诉我当前上下文中不存在名称“temp”

尽量使用方法的全名

例如:

namespace.class.method();

而不是

class.method();

似乎即时窗口也依赖于当前选定的文件/项目。

希望这会有所帮助 马蒂亚斯

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我以为我在调试,但还有一个更简单(但很重要)的步骤。在“解决方案配置”设置为“调试”的地方,我还必须单击“调试”旁边的向下箭头并选择“配置管理器...”,然后在相应的弹出窗口中,“配置”仍设置为“发布”——我必须将其更改为“调试”并单击“关闭”按钮。从那里重新运行允许我在调试时查看所有变量。

    【讨论】:

      【解决方案3】:

      也许变量尚未在您遇到断点的代码块中声明或初始化(即执行还没有到那么远)。

      例如,当您遇到以下代码块中的bar 时,您所描述的悬停和立即窗口问题都会在您遇到断点时发生:

      public class Whatever
      {
          public void DoSomething()
          {
              string foo = "blah"; // Breakpoint hit and execution stopped here.
      
              // Do something.
      
              DoSomethingElse();
          }
      
          public void DoSomethingElse()
          {
              string bar = "yack";
      
              // Do something else.
          }
      }
      

      【讨论】:

      • 绝对不是问题。我知道断点在我正在查看的代码中。
      • 也许是这样,@Craig White。人们希望如此。 :) 当我们说服自己不这样说时,简约法则通常是这些问题的根源——尤其是在具有三重嵌套循环的代码中。调试器似乎认为变量超出了范围,并且它很可能是正确的。
      【解决方案4】:

      事实证明,当时方法的复杂性和缩进的数量导致了问题。我已经简化并运行了大部分原始代码,并且不再遇到这个问题。我还升级到了 VS2012,这也可能有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 2014-05-05
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多