Это могло сэкономить мне так много времени. Иногда я пишу вещи как это в часах или непосредственном окне:
MyObject.Function1.Fuction2.Fuction3.Fuction2
Вместо этого я мог просто объявить несколько новых переменных и сделать это более структурированным способом.
Однако выполнение этого не позволяется.
Есть ли некоторый способ, которым я могу сделать это? Там будет поддержкой того, что я хочу в каких-либо будущих версиях?
В C# вы можете объявлять переменные в непосредственном окне во время отладки (честно говоря, я не знаю, является ли это особенностью только VS2008, но я только что проверил это в VS2008 team edition).
Вы не можете объявлять переменные в окне Watch (на самом деле, сообщение об ошибке гласит: "Заявления о декларации разрешены только в непосредственном окне"), но вы можете просматривать любые переменные, которые вы создали в непосредственном окне.
Также вы не можете использовать var
при объявлении переменных в непосредственном окне, но кроме этого вы можете делать то, о чем спрашиваете.
@AMissico указал на мою ошибку - очевидно, в VB.NET это можно сделать с помощью неявного присваивания.
Я бы все еще считал это костылем, и если бы мне когда-нибудь понадобилось это сделать, я бы начал спрашивать, почему программа построена таким образом, что это необходимо.
Если вам нужна отладочная информация такого уровня, то лучше поместить ее в логику программы - таким образом, когда будущим программистам по сопровождению придется отлаживать тот же путь кода, у них будет вся та же подробная информация без необходимости "допрашивать" глубоко вложенные графы объектов. Вместо того чтобы писать MyObject.Function1().Function2().Function3()
, напишите:
var first = MyObject.Function1();
var second = first.Function2();
var third = second.Function3();
Тогда вы сможете пройтись по реальной логике программы в отладчике вместо того, чтобы писать целый тестовый сценарий в окне Immediate.
Вы также можете рассмотреть возможность написания собственного Визуализатора отладчика, если вам нужно получить детальное представление сложного объекта или иерархии.
В дополнение к тому, что говорит Ааронаут, такие конструкции, как вы описываете, нарушают Закон Деметры . Вы можете подумать о реструктуризации вашей программы, чтобы в таких конструкциях не было необходимости. Фактически, даже в предложенном решении сохраняется нарушение надлежащего разделения проблем.
Если метод ссылается не более чем на один уровень косвенного обращения, то поведение отладчика будет более подходящим для приложения.
Это может быть альтернативой: вы можете использовать Object Test Bench для создания экземпляра MyObject и вызывать метод экземпляра с любыми аргументами, которые вам нужны (или просто вызывать без создания экземпляра, если это статический метод).