Looks like you are using the wrong size here:
for (int i = 0; i < arrayWeightToOutput.Length; i++)
{
arrayWeightToOutput[i] = new double[hiddenToOutput];
}
You should be using
inputToHidden
instead:
for (int i = 0; i < arrayWeightToOutput.Length; i++)
{
arrayWeightToOutput[i] = new double[inputToHidden];
}