定义对象列表。获取对象中的特定字段
我们如何在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) },
};
但正如你看到的,我必须声明段名两次,这看起来不雅观。有没有更优雅的方式?
但正如你看到的,我必须声明段名两次,这看起来 不雅。有没有更优雅的方式?
为了避免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);
美丽。谢谢! – arminb
您可以编写一个函数,该函数接受一个节的列表并返回相应的字典。喜欢的东西:
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;
}
或者使用内置的Linq'ToDictionary'方法... –
如果不是时间关键那么您可以在使用它List<Section> list = new ArrayList<Section>();
和存储数据。
后来你可以使用LINQ
根据名称来查询.where(x=>x.Name=="somename")
可以使用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"];
首先你所有的模型类的可以关注一下:
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
为什么不使用LINQ,并选择其中(S => s.Name ==名称)? –