所以我在名为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;
}
答案 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方法帮我找到了这个,谢谢。