0

在我的应用程序中,我通过将列表转换为数组将数据写入文本文件,稍后我想通过将其转换为相同的列表类型来加载它并像这样返回它。

我的代码:

public abstract class PhoneBookCore
{
    protected string _group;

    public PhoneBookCore(string group)
    {
        this._group = group;
    }
}

public class Group : PhoneBookCore
{
    private List<PhoneBookCore> elements = new List<PhoneBookCore>();

    public List<PhoneBookCore> elementsList { 
         get { return new List<PhoneBookCore>(elements); } 
    }

    public Group(string name)
        : base(name)
    {
    }

class DataOptions
{
    public void Save(Group g)
    {
        string[] lines = g.elementsList.ConvertAll(p => p.ToString()).ToArray();
        File.WriteAllLines(path, lines);
    }

    public Group Load()
    {
        string[] buffer = File.ReadAllLines(path); // ----> How do I convert it back
                                                   //       to list of type group?

        return ;
    }
}  

如何将其转换回类型组列表?

4

2 回答 2

1

也许(假设您想将整行传递给 Group-constructor)

List<Group> allgroups = File.ReadLines(path)   
    .Select(l => new Group(l))
    .ToList();

请注意,我使用File.ReadLines了它返回流IEnumerable<string>而不是 a string[],您也可以使用File.ReadAllLines.

但是为什么你总是在elementsList属性中创建一个新列表?刚回来elements

编辑如果要创建一个组并elementsList从行中设置,则需要首先提供属性的设置器:

private List<PhoneBookCore> _elementsList = new List<PhoneBookCore>();
public List<PhoneBookCore> ElementsList
{ 
    get { return _elementsList; }
    set { _elementsList = value; }
}

然后您可以通过这种方式初始化和设置组:

Group g = new Group(path); // i have no idea
g.ElementsList = File.ReadLines(path)
    .Select(l => new PhoneBookCore(l))
    .ToList();

return g;
于 2013-02-07T15:52:21.927 回答
1

您希望将缓冲区列表中的每个字符串项投影到新的 PhoneBookCore 实例。由于您已经在使用 LINQ 扩展,因此以下内容就足够了:

elementsList = buffer.Select(s => new PhoneBookCore(s)).ToList();
于 2013-02-07T15:56:10.430 回答