Ошибка с таблицей C#

ftbwork10

Client
Регистрация
29.05.2017
Сообщения
442
Благодарностей
697
Баллы
93
Есть такой сниппет

C#:
lock(SyncObjects.TableSyncer){
  
    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["AccountsList"].GetRow(0).ToList();
    project.Tables["AccountsList"].DeleteRow(0);
    project.Variables["Variables1"].Value = row[0];
    project.Variables["Variables2"].Value = row[1];
    project.Variables["Variables3"].Value = row[2];
    project.Variables["Variables4"].Value = row[3];
    project.Variables["Variables5"].Value = row[4];
}

если какое-то из значений пустой, в лог получаю такую ошибку

Выполнение действия CSharp OwnCode. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index


как исправить данный сниппет, чтобы работало с пустыми значениями?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
C#:
lock(SyncObjects.TableSyncer){
 
    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["AccountsList"].GetRow(0).ToList();
    project.Tables["AccountsList"].DeleteRow(0);
    try{
        project.Variables["Variables1"].Value = row[0];
        project.Variables["Variables2"].Value = row[1];
        project.Variables["Variables3"].Value = row[2];
        project.Variables["Variables4"].Value = row[3];
        project.Variables["Variables5"].Value = row[4];
    }catch{}
}
C#:
 
  • Спасибо
Реакции: ftbwork10
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
C#:
lock(SyncObjects.TableSyncer){

    // берем первую строку с удалением и раскидываем значения по переменным
    var row = project.Tables["AccountsList"].GetRow(0).ToList();
    project.Tables["AccountsList"].DeleteRow(0);
    try{
        project.Variables["Variables1"].Value = row[0];
        project.Variables["Variables2"].Value = row[1];
        project.Variables["Variables3"].Value = row[2];
        project.Variables["Variables4"].Value = row[3];
        project.Variables["Variables5"].Value = row[4];
    }catch{}
}
C#:
В этом случае, надо предохранитель, чтобы при исключении, строка не удалялась, а то данные в никуда...

Можно попробовать код ниже, так мы гарантированно не уйдем за index.

C#:
lock(SyncObjects.TableSyncer)
{

    var row = project.Tables["AccountsList"].GetRow(0).ToList();
    project.Tables["AccountsList"].DeleteRow(0);
    
    var varNames = new string[] {"Variables1", "Variables2", "Variables3"};
    int varCount = varNames.Length - 1;
    
    for (int i=0; i < row.Count; i++)
    {
        if (varCount < i)
            break;
        
        project.Variables[varNames[i]].Value = row[i];
    }
}
/CODE]
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)