我想知道如何引用每个数据循环,以便将其传递给文本框。 如果有5个循环,我如何才能选择仅在我的主窗体上的文本框中显示的第3个循环? 我已经添加了m_intNumberofEvents来计算它所做的循环数,但我不知道如何连接它或者它是否有效。请帮忙!谢谢!
public List<Event> ExtractData(DateTime dtmDay)
{
int intChosenDay = dtmDay.Day;
m_intNumberofEvents = 0;
int intFileDay;
StreamReader textIn = new StreamReader(
new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read));
//create the list
List<Event> events = new List<Event>();
string[] lines = File.ReadAllLines(path);
for (int index = 4; index < lines.Length; index += 5)
{
Event special = new Event();
special.Day = Convert.ToInt32(lines[index - 4]);
special.Time = (lines[index - 3]);
special.Price = Convert.ToDouble(lines[index - 2]);
special.StrEvent = lines[index - 1];
special.Description = lines[index];
events.Add(special);
m_intNumberofEvents++;
}
textIn.Close();
return events;
}
答案 0 :(得分:2)
我的要求可能有问题,但是在循环之后你将有一个Event
对象列表,如果你只想使用第3个项目(即第3个循环中填充的那个)那么你可以从列表中拉出来就像这样:
Event thridEvent = events[2];//NOTE: 0 based index
//do something with the event, like populate a textbox
您可以访问所需列表中的任何项目,0 = 1st,1 = 2nd,2 = 3rd等...
您也不需要计算它所执行的循环次数,您可以从列表的长度中获得相同的值:
int numberOfLoops = events.Count();
还值得一提的是,如果输入数据不符合预期格式,您的输入文件就无法验证。
答案 1 :(得分:0)
您可以将逻辑提取到单独的方法中,以简化从字符串[]数组中提取Event对象:
Event ReadEventFromIndex(string[] lines, int index)
{
index = 4 + index * 5;
Event special = new Event();
special.Day = Convert.ToInt32(lines[index - 4]);
special.Time = (lines[index - 3]);
special.Price = Convert.ToDouble(lines[index - 2]);
special.StrEvent = lines[index - 1];
special.Description = lines[index];
return special;
}
注意我如何通过lines[]
index = 4 + index * 5;
所需的偏移量
然后,如果你想要第3个项目(当然是逻辑索引2,当然不是3个),你可以这么做:
var thirdEvent = ReadEventFromIndex(lines, 2);