2017-04-05 114 views
4

我們如何在C#中創建對象列表並通過此對象內的特定字段訪問它們?定義對象列表。獲取對象中的特定字段

例如藉此對象:

class Section 
{ 
    public string Name { get; } 
    public long Size { get; } 

    public Section(string name, long size) 
    { 
     Name = name; 
     Size = size; 
    } 
} 

我想創建這些對象,我可以通過Section.Name訪問列表。

我可以創建就像一本字典:

private static readonly Dictionary<string, Section> validSections = new Dictionary<string, Section> 
    { 
     { "section-a", new Section("section-a", 1) }, 
     { "section-b", new Section("section-b", 2) }, 
     { "section-c", new Section("section-c", 3) }, 
     { "section-d", new Section("section-d", 4) }, 
    }; 

但正如你看到的,我必須聲明段名兩次,這看起來不雅觀。有沒有更優雅的方式?

+0

爲什麼不使用LINQ,並選擇其中(S => s.Name ==名稱)? –

回答

2

但正如你看到的,我必須聲明段名兩次,這看起來 不雅。有沒有更優雅的方式?

爲了避免repetitve字,就可以通過電話ToDictionary創建切片的集合詞典:

private static readonly Dictionary<string, Section> validSections = new[] { 
     new Section("section-a", 1), 
     new Section("section-b", 2), 
     new Section("section-c", 3), 
     new Section("section-d", 4) 
    }.ToDictionary(s => s.Name); 
+1

美麗。謝謝! – arminb

0

您可以編寫一個函數,該函數接受一個節的列表並返回相應的字典。喜歡的東西:

public static Dictionary<string, Section> SectionDictionary(List<Section> sections) { 
    var dict = new Dictionary<string, Section>(); 
    foreach (var section in sections) 
     dict.Add(section.Name, section); 
    return dict; 
} 
+0

或者使用內置的Linq'ToDictionary'方法... –

2

如果不是時間關鍵那麼您可以在使用它List<Section> list = new ArrayList<Section>();和存儲數據。
後來你可以使用LINQ根據名稱來查詢.where(x=>x.Name=="somename")

0

可以使用LINQ剛剛訪問元素:

var list = ...; 
var el = list.FirstOrDefault(o => o.Name = nameValue); 

或者你可以創建一個(集合)類,它實現你自己的索引/吸氣邏輯。例如。 (僞)

public class MyCollection : Collection<Section> 
{ 
    public Section this[string nameValue] 
    { 
     get 
     { 
      return this.FirstOrDefault(o => o.Name == nameValue); 
     } 
    } 
} 

然後用法是:

var coll = new MyCollection() ....; 
var el = coll["Some name"]; 
1

首先你所有的模型類的可以關注一下:

class Section 
{ 
    public string Name { get; set; } 
    public long Size { get; set; } 
} 

你不需要Name兩次,這樣你就可以只需創建一個清單:

private static List<Section> myList = new List<Section>(); 
myList.add(new Section {Name = "section-a", Size = 1}); 
// do this for all the sections ... 

然後其他答案建議你可以使用LINQ:

myList.Single(s => s.Name == "section-a"); 

將直接返回元素,其中名稱是「部分-A」。

瞭解更多關於LINQ這裏:https://msdn.microsoft.com/en-us/library/bb308959.aspx

相關問題