Почему я не могу объявить новые переменные в непосредственном окне?

Это могло сэкономить мне так много времени. Иногда я пишу вещи как это в часах или непосредственном окне:

MyObject.Function1.Fuction2.Fuction3.Fuction2

Вместо этого я мог просто объявить несколько новых переменных и сделать это более структурированным способом.

Однако выполнение этого не позволяется.

Есть ли некоторый способ, которым я могу сделать это? Там будет поддержкой того, что я хочу в каких-либо будущих версиях?

18
задан Jay Bazuzi 8 March 2010 в 23:45
поделиться

5 ответов

Не используйте Dim

jack = 12
? jack
12 {Integer}
20
ответ дан 30 November 2019 в 06:01
поделиться

В C# вы можете объявлять переменные в непосредственном окне во время отладки (честно говоря, я не знаю, является ли это особенностью только VS2008, но я только что проверил это в VS2008 team edition).

Вы не можете объявлять переменные в окне Watch (на самом деле, сообщение об ошибке гласит: "Заявления о декларации разрешены только в непосредственном окне"), но вы можете просматривать любые переменные, которые вы создали в непосредственном окне.

Также вы не можете использовать var при объявлении переменных в непосредственном окне, но кроме этого вы можете делать то, о чем спрашиваете.

3
ответ дан 30 November 2019 в 06:01
поделиться

@AMissico указал на мою ошибку - очевидно, в VB.NET это можно сделать с помощью неявного присваивания.

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

Если вам нужна отладочная информация такого уровня, то лучше поместить ее в логику программы - таким образом, когда будущим программистам по сопровождению придется отлаживать тот же путь кода, у них будет вся та же подробная информация без необходимости "допрашивать" глубоко вложенные графы объектов. Вместо того чтобы писать MyObject.Function1().Function2().Function3(), напишите:

var first = MyObject.Function1();
var second = first.Function2();
var third = second.Function3();

Тогда вы сможете пройтись по реальной логике программы в отладчике вместо того, чтобы писать целый тестовый сценарий в окне Immediate.

Вы также можете рассмотреть возможность написания собственного Визуализатора отладчика, если вам нужно получить детальное представление сложного объекта или иерархии.

2
ответ дан 30 November 2019 в 06:01
поделиться

В дополнение к тому, что говорит Ааронаут, такие конструкции, как вы описываете, нарушают Закон Деметры . Вы можете подумать о реструктуризации вашей программы, чтобы в таких конструкциях не было необходимости. Фактически, даже в предложенном решении сохраняется нарушение надлежащего разделения проблем.

Если метод ссылается не более чем на один уровень косвенного обращения, то поведение отладчика будет более подходящим для приложения.

0
ответ дан 30 November 2019 в 06:01
поделиться

Это может быть альтернативой: вы можете использовать Object Test Bench для создания экземпляра MyObject и вызывать метод экземпляра с любыми аргументами, которые вам нужны (или просто вызывать без создания экземпляра, если это статический метод).

1
ответ дан 30 November 2019 в 06:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: