Другим случаем, когда NullReferenceExceptions
может случиться, является (неправильное) использование оператора as
:
class Book {
public string Name { get; set; }
}
class Car { }
Car mycar = new Car();
Book mybook = mycar as Book; // Incompatible conversion --> mybook = null
Console.WriteLine(mybook.Name); // NullReferenceException
Здесь Book
и Car
являются несовместимыми типами; a Car
не может быть преобразован / передан в Book
. Когда этот сбой завершается неудачно, as
возвращает null
. Используя mybook
после этого, вы вызываете NullReferenceException
.
В общем случае вы должны использовать cast или as
, как показано ниже:
Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:
ComicBook cb = (ComicBook)specificBook;
Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as
:
ComicBook cb = specificBook as ComicBook;
if (cb != null) {
// ...
}
убить процесс. предполагая, что вы можете получить доступ к консоли через ssh, и ваш сервер работает в linux:
ps -ef | grep php // to get a list of php-processes
kill [process-id] // kill the process by process-id
Я вошел в систему через SSH и попытался убить процесс, но он, похоже, не работал - возможно, неправильный процесс, так как там было немало.
Вы всегда можете перезапустить apache как последнее средство ; это исправит, -)
Возможно, вы захотите связаться со своим хостингом и попросить их убить ваш скрипт. Скорее всего, у вас нет доступа к выполнению или ssh-доступа. Возможно, вы должны создать возможность выйти из своей программы при следующем создании бесконечного цикла.