Я столкнулся с той же проблемой, используя Envoyer для Laravel - и это было довольно неприятно. Моим решением было следовать варианту 3) на https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/comments/16
Создать Файл /etc/init/php5-fpm.override с отдельной строкой «сигнал перезагрузки USR2».
null
здесь не проблема, но индекс недействителен. Массивы в C # основаны на 0, поэтому, если вы создаете массив с 1 элементом, допустим только индекс 0
:
array[0] == null
Этого можно избежать, проверив границы вручную перед доступом к индексу:
if (index < array.Length) {
// access array[index] here
} else {
// no exception, this is the "invalid" case
}
object[] arrayText = new object[1];
if (arrayText[0] == null)
{
MessageBox.Show("Is null");
}
Попробовать? Массивы основаны на 0, поэтому попытка доступа к arrayText [1] приведет к исключению OutOfBoundsException. И команда try / catch не сильно повлияет на вашу производительность, в этот момент в стеке не так много всего.
Вы обращаетесь к индексу, который находится за пределами массива. Инициализатор массива принимает число для количества элементов, а не максимальный индекс (например, VB.NET). Поскольку массивы начинаются с нуля, ваш максимальный индекс в этом случае равен 0.
Проверьте .Length массива внутри цикла или, еще лучше, установите параметры цикла так, чтобы они были ограничены длиной массива.
object[] arrayText = new object[1];
for (int i = 0; i < arrayText.Length; i++)
{
doWork(arrayText[i]);
}
Я думаю, проблема не в том, что arrayText 1 имеет значение null, а в том, что arrayText 1 не существует, поэтому вы должны получить исключение IndexOutOfRangeException, а не null
, если вы в ручье и не можете легко изменить код, чтобы проверить длину, вы можете подумать о добавлении функции, которая проверяет свойство Length (см. фрагмент ниже) или оператора перегрузки [] ... из них немного мерзко, но если вы в рассоле ... :)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace array
{
class Program
{
static object Index(object [] array, int idx)
{
if (idx >= array.Length)
return null;
else
return array[idx];
}
static void Main(string[] args)
{
object[] blah = new object[10];
object o = Index(blah, 10);
}
}
}
Если вы прочтете описание создаваемого исключения, вы увидите, что это «Индекс был за пределами массива».
Новый объект [1]
указывает, что массив имеет один элемент. (1 - счетчик) Однако начало индексации массива C # с 0, а не с 1, поэтому массив из одного элемента имеет индекс 0. Таким образом, arrayText [0]
вернет null, но arrayText [1]
вызовет исключение.