将数组转换为自定义列表

时间:2013-02-07 15:48:30

标签: c#

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

我的代码:

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 ;
    }
}  

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

2 个答案:

答案 0 :(得分:1)

可能(假设您想将整行传递给Group-constructor)

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

请注意,我使用File.ReadLines返回了流媒体IEnumerable<string>而不是string[],您还可以使用File.ReadAllLines一次性将所有内容全部读入内存。

但为什么总是在elementsList属性中创建一个新列表?只需返回elements

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

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;

答案 1 :(得分:1)

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

elementsList = buffer.Select(s => new PhoneBookCore(s)).ToList();