2010-03-07 3 views
14

Это может спасти меня так много времени. Иногда я ловлю себя писать такие вещи, как это в часах или немедленного окна:Почему я не могу объявить новые переменные в непосредственном окне?

MyObject.Function1.Fuction2.Fuction3.Fuction2 

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

Однако делать это не допускается.

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

+0

Какой язык? –

ответ

17

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

jack = 12 
? jack 
12 {Integer} 
+0

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

+1

Проблема - неправильный вопрос. – AMissico

2

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

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

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

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

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

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

+0

Вы не понимаете, я отлаживаю иерархии. Вот как они разработаны. Мне нужно объявить несколько варов, чтобы эффективно их отлаживать. – Tomasi

+0

@diamandiev: Так объявите переменные ** в коде **, а не в отладчике. Или создайте визуализатор, который вообще не требует изменения какого-либо кода. Что-то мешает вам это делать? – Aaronaught

+0

@ diamandiev: создайте переменные в коде, чтобы их можно было использовать в Immediate Windows. Поместите переменные в модуль с общедоступной областью. Кроме того, поскольку вы отлаживаете, создайте процедуры тестирования в модуле, чтобы вы могли вызывать их из Immediate Windows и устанавливать контрольные точки в процедурах тестирования. – AMissico

1

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

+0

Не работает для VB, если вы не знаете пути. – AMissico

+0

Я использую его все время (в VB). Он может использоваться только в активном проекте в решении. Вы создаете экземпляр (или вызываете статический метод) с помощью окна «Вид класса» и манипулируете методами экземпляра, используя само окно «Test Test Bench». –

+0

О, это правильно! Только активный проект. Я всегда забываю об этом. Как и я забыл, я могу изменить активный проект, чтобы добраться до объекта. – AMissico

0

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

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

3

С помощью C# вы можете объявлять переменные в непосредственном окне во время отладки (я честно не знаю, является ли это только функцией VS2008, но я только что проверил ее в редакции VS2008).

Вы не можете объявить переменную в окне просмотра (на самом деле сообщение об ошибке говорит, что «заявления о декларации разрешены только в непосредственном окне»), но вы можете наблюдать за любыми переменными, которые вы создали в непосредственном окне.

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

+1

Я не использую C# слишком плохо. почему C# всегда получает все классные вещи? – Tomasi

+0

При пропуске голосования, пожалуйста, оставьте комментарий. –

+0

Я проголосовал за -1, потому что вы можете. Просто не могу использовать 'Dim' или' As ... '. – AMissico

12

Просто отвечая на вопрос из заголовка:

В 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" 
Смежные вопросы