0

我想知道如何去引用每个数据循环,以便我可以将它传递给文本框。如果有 5 个循环,我该如何选择仅在主窗体的文本框中显示第三个循环?我添加了 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;
  }
4

2 回答 2

2

我的要求可能是错误的,但是在循环之后,您将拥有一个Event对象列表,如果您只想使用第三个项目(即在第三个循环中填充的那个),那么您可以像这样从列表中拉出它:

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();

还值得一提的是,您没有对输入文件进行验证,如果输入数据不是预期的格式,您的应用程序将崩溃。

于 2013-04-26T08:23:18.887 回答
0

您可以将逻辑提取到单独的方法中,以简化从 string[] 数组中提取 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;

然后,如果您想要第三项(逻辑索引为 2,当然不是 3),您可以这样做:

var thirdEvent = ReadEventFromIndex(lines, 2);
于 2013-04-26T08:27:16.483 回答