要列出的数组<t> c#

时间:2018-04-09 22:02:30

标签: c# arrays visual-studio list

我当前的代码工作正常,输出正确。我从data.txt文件中提取数据,并使用TextFieldParser成功完成了对数组的操作。有没有办法将我的代码转换为List?怎么会这样?如果转换不是一个选项,那么任何建议从哪里开始代码?基本上是尝试从数组转到列表集合。

public partial class EmployeeInfoGeneratorForm : Form
{
    public EmployeeInfoGeneratorForm()
    {
        InitializeComponent();
    }

    // button event handler
    private void GenerateButton_Click(object sender, EventArgs e)
    {
        string[] parts;

        if(File.Exists("..\\data.txt"))
        {
            TextFieldParser parser = new TextFieldParser("..\\data.txt");

            parser.Delimiters = new string[] { "," };
            while (true)
            {
                parts = parser.ReadFields();
                if (parts == null)
                {
                    break;
                }
                this.nameheadtxt.Text = parts[0];
                this.addressheadtxt.Text = parts[1];
                this.ageheadtxt.Text = parts[2];
                this.payheadtxt.Text = parts[3];
                this.idheadtxt.Text = parts[4];
                this.devtypeheadtxt.Text = parts[5];
                this.taxheadtxt.Text = parts[6];

                this.emp1nametxt.Text = parts[7];
                this.emp1addresstxt.Text = parts[8];
                this.emp1agetxt.Text = parts[9];
                this.emp1paytxt.Text = parts[10];
                this.emp1idtxt.Text = parts[11];
                this.emp1typetxt.Text = parts[12];
                this.emp1taxtxt.Text = parts[13];

                this.emp2nametxt.Text = parts[14];
                this.emp2addresstxt.Text = parts[15];
                this.emp2agetxt.Text = parts[16];
                this.emp2paytxt.Text = parts[17];
                this.emp2idtxt.Text = parts[18];
                this.emp2typetxt.Text = parts[19];
                this.emp2taxtxt.Text = parts[20];

                this.emp3nametxt.Text = parts[21];
                this.emp3addresstxt.Text = parts[22];
                this.emp3agetxt.Text = parts[23];
                this.emp3paytxt.Text = parts[24];
                this.emp3idtxt.Text = parts[25];
                this.emp3typetxt.Text = parts[26];
                this.emp3taxtxt.Text = parts[27];

            }

        } 
        else //Error Message for if File isn't found
        {
            lblError.Text = "File Not Found";
        }
    }
}

3 个答案:

答案 0 :(得分:2)

在您的代码示例中,有两个数组。

第一个例子

parser.Delimiters = new string[] { "," };

由于parserTextFieldParser,我可以看到Delimiters必须设置为字符串数组。所以你无法改变它。

第二个例子

string[] parts;
parts = parser.ReadFields();

此数组接受parser.ReadFields()的结果。该函数的输出是一个字符串数组,因此不能在不中断调用的情况下更改此代码。

但是,您可以在以后立即将其转换为列表:

var parts = parser.ReadFields().ToList();

这也没有多大意义。

当数组/列表的大小在创建后没有变化时,数组与列表一样好。将其列入列表只会增加开销。

答案 1 :(得分:2)

这里有很多问题。我倾向于像这样编写你的代码:

/usr/bin/chrominum-browser

我重构您的代码,将UI更新放在一个方法中:

public static IEnumerable<List<string>> ParseFields(string file)
{
  // Use "using" to clean up the parser.
  using (var parser = new TextFieldParser(file))
  {
    parser.Delimiters = new string[] { "," };
    // Use end-of-data, not checks for null.
    while (!parser.EndOfData)
      yield return parser.ReadFields().ToList();
  }
}

您只对序列中的 last 元素执行某些操作;以前的所有修改都会丢失。所以要明确:

private void UpdateText(List<string> parts ) { ... }

当你将它分解成更小的部分时,看看逻辑看起来有多清洁?拥有适合页面的方法非常令人愉快。

答案 2 :(得分:0)

直接回答您的问题:

使用带有IEnumerable<T>参数的 export class NodeLoader { node: TreeNode; } 构造函数。

话说回来,在你完全理解之前,我会读到Lippert先生的答案。