Цикл массива строк для создания переменных класса этих строк - PullRequest
0 голосов
/ 25 мая 2018

Итак, у меня есть этот код в файле .cs с именем SchoolData, в котором есть класс и список.

public static List<YearGroupsData> yearGroupsDataList = new List<YearGroupsData>();

public class YearGroupsData
{
    public int id { get; set; }
    public int year { get; set; }
    public string groupName { get; set; }
    public int subject { get; set; }
}

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

private IEnumerator ViewYearGroups()
{
   //Some code for connection here
    yield return viewYearGroups;
    string yearGroupsDataString = viewYearGroups.text;
    yearGroups = yearGroupsDataString.Split(';');


    foreach (string yearGroup in yearGroups)
    {
        YearGroupsData yearGroupsData = new YearGroupsData()
        {
            id = Int32.Parse(GetDataValue(yearGroup, "Id:")),
            year = Int32.Parse(GetDataValue(yearGroup, "Year:")),
            groupName = GetDataValue(yearGroup, "GroupName:"),
            subject = Int32.Parse(GetDataValue(yearGroup, "Subject:")),
        };
        SchoolData.yearGroupsDataList.Add(yearGroupsData);
    }
}

GetDataValue являетсячасть, которая портит.Это дает мне ArgumentOutOfRangeException, и я не уверен, почему.Это работает, если я не использую его в цикле, я тоже пробовал цикл for и все тот же, кто-нибудь знает, что происходит?

public string GetDataValue(string data, string index)
{
    string value = data.Substring(data.IndexOf(index) + index.Length);
    if (value.Contains("|"))
    {
        value = value.Remove(value.IndexOf("|"));
    }
    return value;
}

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Исключение ArgumentOutOfRangeException возникает, когда значение аргумента выходит за допустимый диапазон значений, как определено вызванным методом

, попробуйте это:

string value = data.Substring(data.IndexOf(index) + index.Length - 1 );
0 голосов
/ 25 мая 2018

Проблема была в том, где я использовал .Split для разделения строки на каждую точку с запятой.В строке, которую я разбивал, после последней точки с запятой был пробел, из которого создавался пустой индекс.Я использовал yearGroups = yearGroups.Take(yearGroups.Count() - 1).ToArray();

, чтобы удалить последний индекс, который был пустым.Метод trycatch помог мне найти это, спасибо.

0 голосов
/ 25 мая 2018

Добавьте попытку в свой метод GetDataValue (), чтобы помочь с отладкой.Если это работает без цикла foreach, то я предполагаю, что один из строковых объектов, по которым вы перебираете объекты, отличается от того, что вы ожидаете.https://msdn.microsoft.com/en-us/library/system.argumentoutofrangeexception(v=vs.110).aspx

try
{
    string value = data.Substring(data.IndexOf(index) + index.Length); 
}
catch (ArgumentOutOfRangeException e) 
{
     Console.WriteLine(e.Message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...