这可以节省我这么多时间。有时我发现自己在手表或即时窗口中写这样的东西:
MyObject.Function1.Fuction2.Fuction3.Fuction2
相反,我可以声明几个新变量,并以更有条理的方式执行此操作。
但是不允许这样做。
有什么方法可以做到这一点吗?在未来的版本中是否会支持我想要的东西?
答案 0 :(得分:33)
回答标题中的问题:
在VS2015中,您可以在即时窗口中声明变量。但是你必须用分号:
结束你的命令var abc = "abcdef";
Expression has been evaluated and has no value
或
var n = 7;
Expression has been evaluated and has no value
或
int o = 8;
Expression has been evaluated and has no value
要显示结果,只需输入变量的名称:
abc
"abcdef"
或
?abc
"abcdef"
或
?abc;
"abcdef"
或
abc;
"abcdef"
答案 1 :(得分:20)
不要使用Dim
jack = 12
? jack
12 {Integer}
答案 2 :(得分:3)
使用C#,您可以在调试期间在即时窗口中声明变量(我真的不知道它是否只是VS2008功能,但我刚刚在VS2008团队版中验证过它。)
您无法在Watch窗口中声明变量(实际上错误消息显示“声明语句仅允许在即时窗口中显示”),但您可以在即时窗口中观看您创建的任何变量。
此外,在即时窗口中声明变量时,您无法使用var
,但除此之外,您可以执行您所要求的操作。
答案 3 :(得分:2)
@AMissico指出了我之前的错误 - 显然你可以在VB.NET中用隐式赋值完成这个。
我仍然认为这是一个拐杖,如果我发现自己需要这样做,我会开始问为什么程序的结构是这样的,这使得必要。
如果您需要这种级别的调试信息,那么将它放在程序逻辑中是一种更好的做法 - 这样,当未来的维护程序员必须调试相同的代码路径时,它们将具有所有相同的详细信息信息,而不必“询问”深层嵌套的对象图。不要写MyObject.Function1().Function2().Function3()
,而是写:
var first = MyObject.Function1();
var second = first.Function2();
var third = second.Function3();
然后,您可以在调试器中单步执行实际的程序逻辑,而不是在立即窗口中编写整个测试脚本。
如果您需要获得复杂对象或层次结构的详细表示,您也可以考虑编写自己的Debugger Visualizer。
答案 4 :(得分:2)
@huha答案的澄清。如果看到error CS0726: '' is not a valid format specifier
,您可能只是忘记了 semicolon
;
。
示例:
DateTime t = DateTime.Parse("2020-01-01 00:00:00")
error CS0726: 't' is not a valid format specifier
t
error CS0103: The name 't' does not exist in the current context
DateTime t = DateTime.Parse("2020-01-01 00:00:00");
Expression has been evaluated and has no value
t
{2020-01-01 00:00:00}
Date: {2020-01-01 00:00:00}
Day: 1
DayOfWeek: Wednesday
DayOfYear: 1
Hour: 0
Kind: Unspecified
Millisecond: 0
Minute: 0
Month: 1
Second: 0
Ticks: 637134336000000000
TimeOfDay: {00:00:00}
Year: 2020
答案 5 :(得分:1)
这可能是另一种选择:您可以使用Object Test Bench创建MyObject实例,并使用您需要的任何参数调用实例的方法(或者只调用该方法而不创建实例,如果它是静态方法)。
答案 6 :(得分:0)
除了Aaronaught所说的,你所描述的这种结构违反了Law of Demeter。您可能需要考虑重构程序,以便不需要这样的构造。实际上,即使提供的解决方案仍然存在违反正确的关注点的情况。
如果方法引用的间接不超过一个级别,那么调试器的行为将更适合应用程序。