C# 访问列表<;MyClass>;通过字符串索引

C# 访问列表<;MyClass>;通过字符串索引,c#,C#,如果我有 List<MyClass> MyObj; 但不久前,我在msdn上的某个地方读到,可以像这样访问我的对象: MyObj["mykey"] = new MyClass(); 这是可能的,还是我在这里编造的?在列表中这是不可能的,因为它只有int索引器(this[int index]),允许按索引获取对象 为此,您应该使用字典,它将允许您按键获取对象,例如: MyDictionary["MyKey"] = new MyClass(); 索引器接受字符串的类型有很多种。您可

如果我有

List<MyClass> MyObj;
但不久前,我在msdn上的某个地方读到,可以像这样访问我的对象:

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

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

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

为此,您应该使用
字典
,它将允许您按键获取对象,例如:

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

索引器接受字符串的类型有很多种。您可能正在查看。

而不是直接查看,因为
列表只有
int
索引器。但是,如果要通过特性查找对象,可以使用LINQ:

MyClass obj = MyObj.FirstOrDefault(c => c.SomeProp == "mykey");
if(obj != null)
{
   // yes
}
另一种方法是使用(密钥必须唯一):


好吧,这可以通过覆盖实现,比如:

public class MyClass : List<int> 
{
    public int this[string key] {
        get {
            return this.Where(x=>x==int.Parse(key)).SingleOrDefault();
        }
    }
}
不需要任何字典或其他数据结构。值得一提的是,在这种情况下,大型集合可能会出现性能问题,但如果集合足够小,请继续

MyClass obj;
if(MyObjDictionary.TryGetValue("mykey", out obj))
{
    // yes
}
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