2013-02-07 64 views
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 ; 
    } 
} 

如何將其轉換回類型的組列表?

+3

爲什麼總是在'elementsList'屬性中創建一個新列表?只需返回'元素'。 –

+0

@TimSchmelter如果我不得不猜測,我會說要將存儲列表設置爲只讀。 –

+0

你的問題是什麼?如果這只是評論中的內容,那麼可以使其更清楚(並且您只需要兩行代碼來說明......) –

回答

1

也許(假設你想傳遞的整條生產線的組構造函數)

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; 
+0

我想返回列表作爲類型組 – darko

+0

然後,您需要爲'elementsList'屬性提供一個setter。編輯我的答案。 –

1

你想在你的緩衝區列表中的每個字符串項投射到一個新的PhoneBookCore實例。由於您已經在使用LINQ擴展,因此以下就足夠了:

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