Это потому, что ваш foreach выполняет одну итерацию слишком много, потому что вы используете <=
вместо '<'. </p>
В этих случаях всегда полезно проверить, что и когда происходит. Вы можете сделать это с помощью отладчика или простого старого Console.WriteLine
(или debug.log w / e)
онлайн-образец: https://dotnetfiddle.net/UyE2rw
public static void Main()
{
var invoer = "12345";
int invoerlengte = invoer.Length;
double nieuwgetal = 0;
for (int i = 0; i <= invoerlengte; i++)
{
Console.WriteLine("i: " + i + ", substring: " + invoer.Substring(i, 1));
if (int.Parse(invoer.Substring(i, 1)) == 1)
{
nieuwgetal += Math.Pow(2,(i+1));
}
}
}
выводит:
i: 0, substring: 1
i: 1, substring: 2
i: 2, substring: 3
i: 3, substring: 4
i: 4, substring: 5
Run-time exception (line 13): Index and length must refer to a location within the string.
Parameter name: length
Stack Trace:
[System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length]
at System.String.Substring(Int32 startIndex, Int32 length)
at MyApp.Main() :line 13
и будьте внимательны - индексы начинаются с 0, считая с 1. Таким образом, substring (0,1) является символом с индексом 0, но является первым элементом (char) в массиве строк .
item1 находится в index0, item2 находится в index1 et c.
De groetjes!