0

我在 foreach 循环中有这个数组:

StreamReader reader = new StreamReader(Txt_OrigemPath.Text);
reader.ReadLine().Skip(1);
string conteudo = reader.ReadLine();            
string[] teste = conteudo.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s in teste)
{
    string oi = s;
}

我正在阅读的行包含一些字段,例如matriculation, id, id_dependent, birthday ... 我有一个 CheckedListBox,用户根据此选择选择他想要选择的字段以及他想要的顺序,并知道数组中每个值的顺序,例如(我知道第一个是matriculation第二个是id第三个是name),我如何选择一些字段,将其值传递给某个变量并根据选中列表框的顺序对它们进行排序?希望我能清楚。

我试过这个:

using (var reader = new StreamReader(Txt_OrigemPath.Text))
            {
                var campos = new List<Campos>();
                reader.ReadLine();
                while (!reader.EndOfStream)
                {
                    string conteudo = reader.ReadLine();
                    string[] array = conteudo.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
                    var campo = new Campos
                    {
                        numero_carteira = array[0]
                    };
                    campos.Add(campo);
                }
            }

现在,我如何遍历列表并将其值与用户从列表中选择的那些字段进行比较 checkedlistbox?因为如果我再次实例化该类,{}它的值将是空的......

Person p = new Person();
string hi = p.numero_carteira;  // null.....
4

1 回答 1

1

Skip(1)将跳过返回的第一行字符串的第一个字符reader.ReadLine()。由于reader.ReadLine()本身跳过第一行,Skip(1)完全是多余的。

首先创建一个可以存储您的字段的类

public class Person
{
    public string Matriculation { get; set; }
    public string ID { get; set; }
    public string IDDependent { get; set; }
    public string Birthday { get; set; }

    public override string ToString()
    {
        return String.Format("{0} {1} ({2})", ID, Matriculation, Birthday);
    }
}

(为了简单起见,这里我使用了字符串,但您也可以使用 int 和 DateTimes,这需要一些转换。)

现在,创建一个将存储人员的列表

var persons = new List<Person>();

将条目添加到此列表中。拆分字符串时不要删除空条目,否则您将丢失字段的位置!

using (var reader = new StreamReader(Txt_OrigemPath.Text)) {
    reader.ReadLine();  // Skip first line (if this is what you want to do).
    while (!reader.EndOfStream) {
        string conteudo = reader.ReadLine();
        string[] teste = conteudo.Split('*');
        var person = new Person {
            Matriculation = teste[0],
            ID = teste[1],
            IDDependent = teste[2],
            Birthday = teste[3]
        };
        persons.Add(person);
    }
}

using语句确保StreamReader在完成时关闭。

于 2013-01-31T20:24:13.367 回答