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

バッファリスト内の各文字列アイテムを新しいPhoneBookCoreインスタンスに投影する必要があります。すでにLINQ拡張機能を使用しているため、以下で十分です。

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

たぶん(行全体を Group-constructor に渡したいと仮定して)

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

の代わりにFile.ReadLinesストリーミングを返す whichを使用したことに注意してください。IEnumerable<string>string[]File.ReadAllLines

elementsListしかし、プロパティで常に新しいリストを作成するのはなぜですか? 戻るだけelementsです。

編集1 つのグループを作成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 に答える