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

C# 如何修改此方法,以便引用或传递每个循环的数据?,c#,C#,我想知道如何引用每个数据循环,以便将其传递给文本框。 如果有5个循环,如何仅选择第3个循环显示在主窗体的文本框中? 我添加了m_intNumberofEvents来计算它的循环数,但我不知道如何连接它,甚至不知道它是否工作。请帮忙!谢谢大家! public List<Event> ExtractData(DateTime dtmDay) { int intChosenDay = dtmDay.Day; m_intNumberofEvents = 0; i

我想知道如何引用每个数据循环,以便将其传递给文本框。 如果有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;
  }
公共列表提取数据(DateTime dtmDay)
{
int intChosenDay=dtmDay.Day;
m_intNumberofEvents=0;
国际文件日;
StreamReader textIn=新的StreamReader(
新的文件流(路径,FileMode.OpenOrCreate,FileAccess.Read));
//创建列表
列表事件=新列表();
string[]lines=File.ReadAllLines(路径);
对于(int index=4;index
您的要求可能有误,但在循环之后,您将有一个
事件
对象列表,如果您只想使用第三个项目(即第三个循环中填充的项目),那么您可以这样从列表中提取它:

Event thridEvent = events[2];//NOTE: 0 based index
//do something with the event, like populate a textbox
您可以访问列表中您想要的任何项目,0=1、1=2、2=3等

您也不需要计算循环的数量,您可以从列表的长度中获得相同的值:

int numberOfLoops = events.Count();

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

您可以将逻辑提取到单独的方法中,以简化从字符串[]数组提取事件对象的过程:

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;
}
注意我如何通过执行
index=4+index*5将逻辑索引转换为访问
行[]
所需的偏移量

然后,如果您想要第三项(当然是逻辑索引2,而不是3),您可以执行以下操作:

var thirdEvent = ReadEventFromIndex(lines, 2);

“5个循环”通常是不好的,你可以考虑重构你的代码!理论上,根据文本文件的大小,可能有100个循环。@Jae只是澄清一下,是循环还是迭代?我真的不明白你的意思。我在给定的代码中只看到一个循环,在运行时它们不会被添加(至少在正常环境中不应该被添加)。@Jae我想你的意思是迭代,而不是for循环中的循环?嗯……每次for循环重复=1“循环”。因此,文本文件的前5行是1集。文本文件的第二个5行是第二组。我希望能够抓取我想要的任何一组,并将其显示在文本框中。这很有帮助!但现在我遇到了另一个问题…这是我的组合框的selectedIndexChanged事件…private void cboEvent_selectedIndexChanged(object sender,System.EventArgs e){event numberofevents=events[mvwDate_DateChanged];txtDescription.Text=Convert.ToString(numberofevents);}@宰:……那它有什么问题?如果这与此问题无关,那么您需要自己尝试解决它,或者问一个新问题。我在突出显示“events[mvwDate_DateChanged]部分时出错。它表示“与'System.Collections.Generic.List.this[int]'匹配的最佳重载方法有一些无效参数。”。“不确定无效参数的位置/内容….@Jae:
mvwDate\u DateChanged
需要是
int
,我怀疑这就是问题所在。最后一个问题。如果我想引用special.Day of events[3],我将如何编写它,以便在special.Day中传递整数值?这是一个二维数组吗?原始问题使用二维数组获取文本数据,我正试图使用列表转换这些数据…@Jae所说的“原始问题”是指问题中没有发布的代码吗?因为您发布的代码中没有2D数组。。。我在上面的答案中发布的代码返回指定索引的单个事件;里面没有2D数组。是的,我对索引不太熟悉。数据是否仍加载到列表中?当你说如果我想要第三项时,你是指第三组数据(日期、时间、价格、街道、描述)?有没有办法只从第三盘中取回“特别的一天”?