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]

我在想,我需要创建一个集合类,从列表继承,但从那里,我不确定。

c#集合中的引用对象是字符串而不是整数

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"; });