我当前的代码工作正常,输出正确。我从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";
}
}
}
答案 0 :(得分:2)
在您的代码示例中,有两个数组。
parser.Delimiters = new string[] { "," };
由于parser
是TextFieldParser
,我可以看到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先生的答案。