Что такое папка решения в Visual Studio?

Примечание: попытка получить свойство ошибки, отличной от объекта

Случается, когда вы пытаетесь получить доступ к объекту объекта, пока нет объекта.

Типичный пример для non-object notice будет

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

В этом случае $users представляет собой массив (а не объект), и он не имеет никаких свойств.

Это похоже для доступа к несуществующему индексу или ключу массива (см. Примечание: Undefined Index ).

Этот пример значительно упрощен. Чаще всего такое уведомление сигнализирует неконтролируемое возвращаемое значение, например. когда библиотека возвращает NULL, если объект не существует или просто неожиданное значение, отличное от объекта (например, в результате Xpath, структуры JSON с непредвиденным форматом, XML с неожиданным форматом и т. д.), но код не проверяет такой условие.

Поскольку эти не-объекты часто обрабатываются дальше, часто возникает фатальная ошибка при вызове метода объекта для не-объекта (см.: Неустранимая ошибка: вызов члену function ... на не-объекте ), останавливая скрипт.

Его можно легко предотвратить, проверив условия ошибки и / или переменную, соответствующую ожиданию. Здесь такое уведомление с примером DOMXPath:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

Проблема заключается в доступе к свойству nodeValue первого поля, пока он не был проверен, существует ли он или нет в $result коллекция. Вместо этого он платит, чтобы сделать код более явным, назначив переменные объектам, на которых работает код:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

Связанные ошибки:

52
задан Peter Mortensen 20 July 2019 в 15:15
поделиться

4 ответа

Я также хотел бы смочь добавить физические папки к решению, но к сожалению Вы не можете сделать так вне проекта.

лучшее решение, которое я нашел, состоит в том, чтобы добавить папку решения с тем же именем как физическая папка (myFolder в Вашем примере), затем добавить файлы от той физической папки до папки решения.

Однако Visual Studio не поддерживает отображение между папкой решения и физической папкой, что означает что:

  • новые файлы, впоследствии созданные в папке решения с помощью Visual Studio, автоматически не помещаются в физическую подпапку (я думаю, что они создаются в корневой папке решения по умолчанию)

  • , файлы, добавленные к физической папке, не автоматически видимы в папке решения, даже с "Шоу Все Файлы".

Для добавления новых файлов я поэтому всегда создаю новый файл в физической папке вне Visual Studio, затем добавляю его к использованию папки решения, "Добавьте/Существующими Объект"

37
ответ дан Joe 7 November 2019 в 09:32
поделиться

Что я сделал, исторически должен создать проект для того, чтобы просто содержать файлы (DLLs, и т.д.)

можно сделать это также. Этот проект можно назвать как любая папка, которую Вы пытаетесь создать.

9
ответ дан Vaibhav 7 November 2019 в 09:32
поделиться

Можно также добавить автономные файлы в папке решения, и они будут управляться источником. Но будьте осторожны, что VS имеет тенденцию помещать эти файлы в ту же папку как файл решения - "Папки Решения" являются виртуальными и не соответствуют реальным папкам файловой системы. Чтобы иметь реальную файловую систему папки, я думаю, что необходимо было бы создать структуру сами и затем выбрать "Add Existing Item".

3
ответ дан Vilx- 7 November 2019 в 09:32
поделиться

Можно использовать папку решения для группировки файлов в решении, но папка решения не представляет дисковую папку, как ее логотип предлагает. (Это может содержать ссылки на файл и ссылки проекта.)

2
ответ дан Peter Mortensen 7 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

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