Visual Studio, кажется, выдает ошибку даже при изменении кода - PullRequest
0 голосов
/ 04 августа 2020

Это действительно странно, и его сложно объяснить, так что оставайтесь со мной.

У меня был довольно-таки базовый c c# код, который запускается на основе введенной строки, тогда эта строка используется, помещается в регистратор, а затем он выполняет некоторые поиски и c с ним ... детали несколько не важны.

Таким образом, он продолжает выдавать сообщение «Индекс был за пределами массива». ошибка, хотя в целях тестирования я вручную устанавливаю массив строк прямо перед его использованием.

args[0] = "{XXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}";
logger.Info("guid:" + args[0]); //Errors here
 _fetchxml = _myApp.getFetchXml("fileguid", args[0], new Guid(), new Guid());

Я даже просто попытался поместить строку перед регистратором, который только что сказал var a = "a", и он дал то же ошибка в этой строке, что заставляет меня думать, что это что-то со сборкой?

введите описание изображения здесь

Я очистил и восстановил решение, но безуспешно, надеюсь, это имеет смысл.

1 Ответ

1 голос
/ 05 августа 2020

Массив неизменяем (то есть фиксированного размера), поэтому, если длина массива равна нулю, он вызовет исключение, если вы попытаетесь добавить строку и назначить ее первой позиции (которая не существует).

Как предлагается в комментариях, вы можете просто подтвердить, действительно ли args.Length равно 0, добавив if-block:

if(args.Length > 0)
{
    args[0] = "{XXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}";
    logger.Info("guid:" + args[0]); //No more Errors here?
    _fetchxml = _myApp.getFetchXml("fileguid", args[0], new Guid(), new Guid());
}
else 
{ 
    logger.Info("guid: --no arguments found--"); 
    // or if _fetchxml is crucial:
    throw new ArgumentException("No guid given");
}

Или, альтернативно, если это только для тестирования, вы можете полностью заменить массив args:

args = new[] { "{XXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" };

Или еще лучше, установите аргумент в разделе отладки свойств проекта в разделе «Параметры запуска» в «Аргументы командной строки» (при условии, что это действительно аргументы командной строки для конечно).

...