4

Иногда вам не важно имя переменной, потому что она не выходит за пределы области вашего подпрограммы. Фактически, указание имени добавит дополнительную строку кода. Также теперь у вас есть это имя, с которым можно столкнуться, что может добавить к потенциальным усилиям по рефакторингу (если вы решите переименовать его позже). Посмотрите на код ниже:Есть ли способ отлаживать предложение VB.NET With в Visual Studio?

Dim fileInfo As New FileInfo("filename.txt") 
With New FileSystemWatcher 
    .Path = fileInfo.DirectoryName 
    .Filter = fileInfo.Name 
    .EnableRaisingEvents = True 
    AddHandler .Changed, AddressOf OnChanged 
End With 

Это совершенно правильная конструкция VB.NET, которая выглядит аккуратно и чисто. Однако, когда дело доходит до отладки и предполагается, что вы поставили точку останова в предложении With, нет возможности захватить это значение .Path, чтобы убедиться, что оно установлено правильно.

Я ничего не вижу здесь или Visual Studio действительно не обеспечивает отладку для .Property синтаксиса внутри With операторов? Я использую 2010.

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

BTW, названные With пункты имеют те же проблемы, то есть, если я должен был написать:

Dim fsw As New FileSystemWatcher 
With fsw 
    .Path = fileInfo.DirectoryName 
    .Filter = fileInfo.Name 
    .EnableRaisingEvents = True 
    AddHandler .Changed, AddressOf OnChanged 
End With 

Я до сих пор не может тянуть значение .Path, имея всегда префикс с fsw.

Проблема растет в размерах, как вы гнездо With статьи друг в друге.

+4

«гнездо С предложениями» Пожалуйста, подумайте о детях :( – asawyer

+0

@asawyer: Должна быть какая-то шутка, связанная с языком, скрывающая эти слова. К сожалению, я не носитель языка, поэтому я не могу это понять. – Neolisk

+1

И в ближайшем окне попробуйте '? .Path', и вы получите' Leading '.' Или '!' Может появляться только внутри оператора With With. «Кажется, что с анонимными объектами нет никакого способа - по крайней мере в названных предложениях 'With' вы можете, конечно, подключиться к источнику' fsw.Path' – djv

ответ

2

Оператор With с неназванной переменной является серьезной проблемой для отладчика, для этого нет обходного пути. Нет ничего плохого в небольшой переменной-хелпере, подобной «fsw», она существует в любом случае, автоматически генерируется компилятором. Это не безымянность, просто невыразимая. Например, VB$t_ref$L0), отладчик не позволит вам ввести его, поскольку он использует символы, которые недопустимы в именах идентификаторов VB.NET. Это намеренно, оно гарантирует, что оно никогда не сталкивается с именем, которое вы использовали. Это также предотвращает его появление в окне Autos.

Вы уже нашли подходящее обходное решение, назвав переменную. Отладка оттуда проста, просто наведите указатель мыши на имя переменной, а не на имя поля. И, конечно, хорошо работает во всех других окнах отладчика, в частности, окно Autos оживает. И не стесняйтесь отказаться от заявления «С» в пользу просто написания заявления в полном объеме, IntelliSense помогает лот, чтобы сделать это менее сложной задачей.

+0

Спасибо за ваш ответ - я буду отмечать его как принято. Думаю, было бы неплохо иметь какой-то синтаксический сахар в VS, чтобы помочь в отладке, например '.Path' конвертируется в' VB $ t_ref $ L0.Path' под капотом и показывает значение этого. – Neolisk

0

Опцией было бы добавить эти переменные в список наблюдения вместо этого и просмотреть значения из окна просмотра.

+0

Как бы это сделать, если у меня есть только '.Path', а VS не распознает это? – Neolisk

Смежные вопросы