我如何将代码从二维数组转换为列表?

时间:2013-04-26 21:33:29

标签: c#

我再次发帖,似乎无法找到一种简单的方法来转换它。我试图摆脱这个方法的二维数组,ExtractData并使用列表替换它,但我没有运气。你们能给我一些我能说的例子或想法吗?谢谢。

private void ExtractData( DateTime dtmDay )
  {
     // set to selected date in MonthCalendar control
     int intChosenDay = dtmDay.Day;
     int intFileDay; // day of event from file
     int intLineNumbers; // counts lines to skip

     m_intNumberOfEvents = 0; // set number of events to 0

     // initialize StreamReader to read lines from file
     StreamReader objInput = 
        new StreamReader( "calendar.txt" );

     // read first line before entering loop
     string strLine = objInput.ReadLine();

     // loop through lines in file
     while ( objInput.Peek() > -1 &&
        m_intNumberOfEvents < 10 )
     {
        intFileDay = Int32.Parse( strLine ); // extract day

        // if event scheduled for specified day,
        // store information
        if ( intFileDay == intChosenDay )
        {
           m_strData[ m_intNumberOfEvents, 0 ] = strLine;
           m_strData[ m_intNumberOfEvents, 1 ] = 
              objInput.ReadLine();
           m_strData[ m_intNumberOfEvents, 2 ] = 
              objInput.ReadLine();
           m_strData[ m_intNumberOfEvents, 3 ] = 
              objInput.ReadLine();
           m_strData[ m_intNumberOfEvents, 4 ] = 
              objInput.ReadLine();
           m_intNumberOfEvents++;
        }
        else
        {
           // skip to next event in file
           for ( intLineNumbers = 0; intLineNumbers <= 3;
              intLineNumbers++ )
              strLine = objInput.ReadLine();
        }

        // read day of next event in file
        strLine = objInput.ReadLine();

     } // end while

  } // end method ExtractData

3 个答案:

答案 0 :(得分:1)

所以你有不同数量的事件,每个事件都有5行“文本”你想单独存储?创建一个类来表示每个事件数据,并创建它们的列表。

public class EventData {
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string Line3 { get; set; }
    public string Line4 { get; set; }
    public string Line5 { get; set; }
}

...

var results = new List<EventData>();

// loop through lines in file
 while ( objInput.Peek() > -1 &&
    m_intNumberOfEvents < 10 )
 {
    intFileDay = Int32.Parse( strLine ); // extract day

    // if event scheduled for specified day,
    // store information
    if ( intFileDay == intChosenDay )
    {
        var foo = new EventData();

        foo.Line1 = strLine;
        foo.Line2 = objInput.ReadLine();
        foo.Line3 = objInput.ReadLine();
        foo.Line4 = objInput.ReadLine();
        foo.Line5 = objInput.ReadLine();

        results.Add(foo);

        m_intNumberOfEvents++;
    }
    else
    {
       // skip to next event in file
       for ( intLineNumbers = 0; intLineNumbers <= 3;
          intLineNumbers++ )
          strLine = objInput.ReadLine();
    }

    // read day of next event in file
    strLine = objInput.ReadLine();

 } // end while

答案 1 :(得分:0)

不得不重复迪伦史密斯所说的话;上课。

我不完全确定你要做什么,但看起来你想要每天发生的一系列事件。如果是这样,那么课程真的最有意义。该类不仅会存储这些字符串,而且还可以拥有越来越多的易于管理的数据(比如事件发生的时间)。

真的,如果你发现自己遇到了这样一个问题,你想要的不只是一个变量来保存一些关于某事的信息,那就建立一个类或一个结构。你以后会感谢自己。

答案 2 :(得分:0)

我看到在这种情况下没有定义新类的意义。您的所有字段都是字符串,并且您在课程中没有方法或属性。它只是一个字符串数组。使用:

var results = new List<string[]>(); 
...
var lines = new string[5];

lines[0] = strLine;
lines[1] = objInput.ReadLine();
lines[2] = objInput.ReadLine();
lines[3] = objInput.ReadLine();
lines[4] = objInput.ReadLine();

results.Add(lines);