3

如果我有

List<MyClass> MyObj;

我可以像这样访问特定成员:

MyObj[0] = new MyClass();

但是前段时间,在我读过的 msdn 上的某个地方,可以像这样访问我的对象:

MyObj["mykey"] = new MyClass();

这可能吗,还是我在这里编造的?

4

4 回答 4

9

List是不可能的,因为它只有int索引器(this[int index]),它允许按索引获取对象。

为此,您应该使用Dictionary<string, MyClass>,这将允许您按键获取对象,例如:

MyDictionary["MyKey"] = new MyClass();

MSDN 词典

于 2013-10-29T16:31:21.177 回答
6

不是直接的,因为 aList<T>只有一个int索引器。但是,如果您想通过属性查找对象,您可以使用 LINQ:

MyClass obj = MyObj.FirstOrDefault(c => c.SomeProp == "mykey");
if(obj != null)
{
   // yes
}

另一种方法是使用一个Dictionary<string, MyClass>(键必须是唯一的):

MyClass obj;
if(MyObjDictionary.TryGetValue("mykey", out obj))
{
    // yes
}
于 2013-10-29T16:31:58.313 回答
3

索引器采用字符串有许多不同的类型。您可能正在查看Dictionary

于 2013-10-29T16:31:29.907 回答
3

好吧,这可能通过这个覆盖来实现,比如:

public class MyClass : List<int> 
{
    public int this[string key] {
        get {
            return this.Where(x=>x==int.Parse(key)).SingleOrDefault();
        }
    }
}

所以在代码中你会像这样使用它:

  var a = new MyClass() {1,2,3,4,5,6,7}; 
  a["5"]; //this will return 5 integer

不需要任何字典或其他数据结构。值得一提的是,在这种情况下,您可能会在大型集合上遇到性能问题,但如果您的集合足够小,请继续使用。

于 2013-10-29T16:36:52.413 回答