循环遍历字符串数组以创建这些字符串的类变量

时间:2018-05-24 23:01:11

标签: c# loops unity3d

所以我在名为SchoolData的.cs文件中有这个代码,它有一个类和一个列表。

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 :(得分:2)

在GetDataValue()方法中添加try catch以帮助调试。如果它在没有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);
}

答案 1 :(得分:1)

当参数的值超出被调用方法所定义的允许值范围时,会发生ArgumentOutOfRangeException

试试这个:

string value = data.Substring(data.IndexOf(index) + index.Length - 1 );

答案 2 :(得分:1)

我使用.Split来分隔每个分号的字符串是个问题。我分裂的字符串在最后一个分号之后有一个空格,该分号从那里创建一个空索引。我用了  a

删除最后一个空的索引。 trycatch方法帮我找到了这个,谢谢。