Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Если можно управлять одним из массивов, можно изменить размеры его прежде, чем выполнить копию:
T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
int array1OriginalLength = array1.Length;
Array.Resize<T>(ref array1, array1OriginalLength + array2.Length);
Array.Copy(array2, 0, array1, array1OriginalLength, array2.Length);
Иначе, можно сделать новый массив
T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
T[] newArray = new T[array1.Length + array2.Length];
Array.Copy(array1, newArray, array1.Length);
Array.Copy(array2, 0, newArray, array1.Length, array2.Length);
[еще 112] на доступных методах Массива на MSDN.
Я предполагаю, что Вы используете свои собственные типы массива в противоположность встроенным массивам.NET:
public string[] merge(input1, input2)
{
string[] output = new string[input1.length + input2.length];
for(int i = 0; i < output.length; i++)
{
if (i >= input1.length)
output[i] = input2[i-input1.length];
else
output[i] = input1[i];
}
return output;
}
Другой способ сделать это использовал бы созданный в классе ArrayList.
public ArrayList merge(input1, input2)
{
Arraylist output = new ArrayList();
foreach(string val in input1)
output.add(val);
foreach(string val in input2)
output.add(val);
return output;
}
Обоими примерами является C#.
Принятие целевого массива имеет достаточно пространства, Array.Copy()
будет работать. Вы могли бы также попытаться использовать List<T>
и .AddRange()
метод.
Я думаю, что можно использовать Массив. Копия для этого. Это берет исходный индекс и целевой индекс, таким образом, необходимо быть в состоянии добавить один массив к другому. Если необходимо пойти более сложные, чем просто добавление одного к другому, это не может быть правильным инструментом для Вас.
Во-первых, удостоверьтесь, что Вы задаете себе вопрос, "Я должен действительно использовать Массив здесь"?
, Если Вы не создаете что-то, где скорость имеет наибольшее значение, введенный Список, как List<int>
является, вероятно, способом пойти. Единственное время я когда-либо использую массивы, для массивов байтов при отправке материала по сети. Кроме этого, я никогда не касаюсь их.
В C# 3.0 можно использовать LINQ's метод Concat для выполнения этого легко:
int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };
int[] combined = front.Concat(back).ToArray();
В C# 2.0 у Вас нет такого прямого пути, но Массива. Копия является, вероятно, лучшим решением:
int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };
int[] combined = new int[front.Length + back.Length];
Array.Copy(front, combined, front.Length);
Array.Copy(back, 0, combined, front.Length, back.Length);
Это могло легко использоваться для реализации собственной версии Concat
.