检查返回值而不将其赋值给变量

10
我可以帮你进行翻译。以下是需要翻译的内容:

我有以下代码片段:

...
var tpc = new ThirtPartyClass();

tpc.ExecuteCommand();
tpc.ExecuteCommand();
...

ExecuteCommand() 方法返回一个带有一些信息的int值。为了调试,我想知道这个返回值。但是我不想将结果分配给一个变量(var result = tpc.ExecuteCommand())。
在VisualStudio 2010中,在调试期间是否有可能检查此返回值而不将其分配给临时变量?
感谢您提前提供建议
编辑:最终,此功能已添加到VS2013
2个回答

8
您可以使用VS2010中的IntelliTrace,在切换到“调用视图”后检查Autos窗口来实现这一点:

enter image description here

但即使没有它,也不必担心;如果您没有使用变量(除了在暂停时查看调试器之外),那么在发布版本中,它将被删除并替换为只有一个“pop”(如果首先不捕获返回值就会得到此结果)。
static void Main()
{
    int i = SomeMethod();
}

编译成:

.method private hidebysig static void Main() cil managed
{
    .entrypoint
    .maxstack 8
    L_0000: call int32 Program::SomeMethod()
    L_0005: pop 
    L_0006: ret 
}

注意没有.localsstloc

对于Resharper,请使用:

// ReSharper disable UnusedVariable
    int i = SomeMethod();
// ReSharper restore UnusedVariable

你说得没错。我的唯一问题是,Resharper 不喜欢这种带有“局部变量永远不会被使用”的代码。而我又不想禁止此类警告,因为在很多情况下它是有用的... - rhe1980
1
很多次我没有将它分配给任何东西,希望在开始调试之前已经这样做了。如果它与本地变量或其他内容一起出现会很好。 - George Duckett
1
@rhe1980 我想知道 r# 是否有“不要在这里应用”选项...编辑:它有 - 请参见编辑。 - Marc Gravell
@MarcGravell,感谢您的帖子!我将尝试使用Intellitrace。由于我不希望最终所有人都在使用它并且代码充满了抑制警告,所以我有点保守。 - rhe1980
@MarcGravell:感谢更新(可惜我使用的是Express)。 - George Duckett
@MarcGravell:我尝试了Intellitrace,我认为这正是我所寻找的!谢谢! - rhe1980

1

在调试期间,您可以使用监视窗口或立即窗口。您可以将代码复制到立即窗口中,在调试期间运行它以查看其返回值。但是请注意,它会再次执行代码以获取返回值。


6
补充一点,这样做的前提是被调用的方法具有幂等性。同时要注意额外调用可能产生的副作用。 - Clafou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接