如何修改此方法以便我可以引用或传递每个循环的数据?

时间:2013-04-26 08:18:25

标签: c#

我想知道如何引用每个数据循环,以便将其传递给文本框。 如果有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;
  }

2 个答案:

答案 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);