c#集合中的引用对象是字符串而不是整数
本文关键字:字符串 整数 对象 集合 引用 | 更新日期: 2023-09-27 18:14:15
我有一个存储在List中的对象集合。
我想使用字符串名称而不是整数来指定a对象的地址。
List<Foo> fooList = new List<Foo>;
Foo item = fooList["Foo Name"]
代替:
List<Foo> fooList = new List<Foo>;
Foo item = fooList[0]
我在想,我需要创建一个集合类,从列表继承,但从那里,我不确定。
Dictionary<string, Foo>
是您想要的类型。
Joren的答案是首选,但如果您需要为某些其他逻辑保留顺序,并且您想要引用的对象的名称可以是该对象的成员,那么一点Linq也可以做到这一点:
List<Foo> fooList = new List<Foo>;
Foo item = fooList.FirstOrDefault(f=>f.Name == "Foo Name");
你可以把它放入自定义集合的"indexer"属性中,该集合派生自list:
public class MyList:List<Foo>
{
public Foo this[string name]
{
get { return this.FirstOrDefault(f=>f.Name == "Foo Name"); }
}
}
…它允许您获得所需的语法,同时保持顺序排序(这在Dictionary中是不能保证的)
您可以直接使用Dictionary<string,Your_Object_type>;
由于您不关心顺序,因此这是最简单的方法。
你总是可以使用字典。然后你可以这样做:
var fooList = new Dictionary<string, Foo>();
fooList.Add("Foo Name", new Foo());
var item = fooList["Foo Name"];
您需要的不是List<T>
,而是Dictionary<TKey, TValue>
。
Dictionary<string, Foo> fooDictionary = new Dictionary<string, Foo>();
fooDictionary.Add("Foo Name", new Foo());
Foo myFoo = fooDictionary["Foo Name"];
您需要编写自己的索引器,如
public datat-type this[int x]
{
get{
//getter code
}
set{
//Setter code
}
}
public data-type this[string x]
{
get{
//setter code
}
set{
//setter doe
}
}
不使用字典,可以使用List。用谓词查找。注意,这是字典的另一种选择,但在如何查找项(对象)方面提供了灵活性。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"; });