Итак, это случилось:Исключения из Random.Next() сбой программы в блоке примерки поймать
Как это возможно в try
-блоке? Почему это не пересылает это catch
-блоку?
Edit:
Было указано, что я мог бы рекурсию. Я делаю, что, как я думал, не вызовет проблемы.
Полный метод выглядит следующим образом:
private static GeoCoordinate ChangeLocation(GeoCoordinate location)
{
var tmp = location;
var direction = new Random().Next(0, 359);
var distance = new Random().Next(0, 5);
//Calculate movement
var vertical = Math.Sin(direction) * distance; //Sinus relation shortened
var lastAngle = 180 - 90 - (direction % 90);
var horisontal = Math.Sin(lastAngle) * distance; //Sinus relation shortened
//Add movement to location
tmp.Latitude = location.Latitude + (vertical/10000);
tmp.Longitude = location.Longitude + (horisontal/10000);
//If new location is outside a specific area
if (!InsidePolygon(_siteCoordinates, tmp))
{
_recursiveCounter++;
//Ninja edit: @Leppie pointed out I was missing 'tmp =':
tmp = ChangeLocation(location); //Recursive move to calculate a new location
}
//Print the amount of recursive moves
if (_recursiveCounter != 0)
Console.WriteLine($"Counter: {_recursiveCounter}");
_recursiveCounter = 0;
return tmp;
}
Это просто потому, что вы находитесь в режиме отладки. Если вы фактически запустили exe (дважды щелкнули на нем) без прикрепленного отладчика, уловка будет работать так, как ожидалось. –
Посмотрите на стек вызовов в отладчике и посмотрите, что переполнено. Вероятно, вы случайно вызываете метод рекурсивно случайно. – Baldrick
Скорее всего, 'ChangeLocation' является виновником, а не' Random' – Ian