我有一个存储在List中的对象集合。
我想通过使用字符串名称而不是整数来解决对象。
List<Foo> fooList = new List<Foo>;
Foo item = fooList["Foo Name"]
而不是:
List<Foo> fooList = new List<Foo>;
Foo item = fooList[0]
我在想我需要创建一个继承自List的集合类,但从那里开始,我不确定。
答案 0 :(得分:14)
Dictionary<string, Foo>
是您想要的类型。
答案 1 :(得分:2)
Joren的答案是首选,但是如果你需要为其他一些逻辑保留顺序,那么你要引用的对象名称可以是该对象的一个成员,而Linq也可以做一点诀窍:
List<Foo> fooList = new List<Foo>;
Foo item = fooList.FirstOrDefault(f=>f.Name == "Foo Name");
您可以将其放入源自list:
的自定义集合的“indexer”属性中public class MyList:List<Foo>
{
public Foo this[string name]
{
get { return this.FirstOrDefault(f=>f.Name == "Foo Name"); }
}
}
...它允许您获得精确的所需语法,同时保持顺序排序(字典无法保证)
答案 2 :(得分:1)
您可以使用Dictionary<string,Your_Object_type>;
由于您不关心顺序,这是最简单的方法。
答案 3 :(得分:0)
您始终可以使用词典。然后你可以这样做:
var fooList = new Dictionary<string, Foo>();
fooList.Add("Foo Name", new Foo());
var item = fooList["Foo Name"];
答案 4 :(得分:0)
而不是List<T>
,您需要Dictionary<TKey, TValue>
。
Dictionary<string, Foo> fooDictionary = new Dictionary<string, Foo>();
fooDictionary.Add("Foo Name", new Foo());
Foo myFoo = fooDictionary["Foo Name"];
答案 5 :(得分:0)
你需要编写自己的索引器,如
public datat-type this[int x]
{
get{
//getter code
}
set{
//Setter code
}
}
public data-type this[string x]
{
get{
//setter code
}
set{
//setter doe
}
}
答案 6 :(得分:0)
可以将List.Find与谓词一起使用,而不是使用字典。请注意,这是字典的替代方法,但可以灵活地找到项(对象)的方式。 Name将是Foo的字符串属性。
示例:
List<Foo> fooList = new List<Foo>;
Foo item = fooList["Foo Name"]
//Find Using Inline
Foo foo = fooList.Find(delegate(Foo f) { return f.Name == "Foo Name"; });