6

我有一个简单的课程:

public class MyClass
{
  public string MyClassName { get; private set; }
  public string MyClassValue { get; private set; }
}

我想保存一个 MyClass 对象数组,如下所示:

MyClass[] myClasses = new MyClass[5];

是否有可能在不创建“集合”对象的情况下通过字符串索引器访问对象数组中的这些对象之一(这是正确的术语)?

例如,如果 myClasses[2] 在 MyClassName 属性中具有值“andegre”,我如何/可以像这样访问它:

MyClass andegre = myClasses["andegre"];

而不是做类似的事情:

MyClass andegre = myClasses[GetIndexOfOfMyClassName("andegre")];

TIA

4

3 回答 3

3

要使自定义索引器在现有集合上工作,该集合需要是自定义集合,并由您实现索引器,这可以是您想要采用的任何参数以及您想要的任何逻辑。采用字符串的自定义索引器完全可以在自定义类型上使用。

当您使用MyClass[](如在本机 .NET 数组中)时,无法覆盖使用的索引器,您得到的只是序数索引器。

或者,要查询您想要的数据,您可以使用 LINQ to Objects(简称 LINQ),正如其他答案所建议的那样。

于 2012-11-06T13:47:36.793 回答
3

MyClass[] myClasses是一个数组(实际上是一个向量)。数组/向量没有任何字符串索引器 - 只是位置访问。

为了得到你想要的,你需要像字典这样的东西,例如:

var myClasses = new Dictionary<string,MyClass>();
myClasses.Add("Fred", new MyClass {...});
myClasses.Add("Betty", new MyClass {...});
myClasses.Add("Wilma", new MyClass {...});
// etc

然后:

MyClass obj = myClasses["Fred"];

或者:

MyClass obj;
if(myClasses.TryGetValue("Fred", out obj)) {
   // found Fred - use obj
} else {
   // no Fred here - don't look at obj
}
于 2012-11-06T13:52:27.853 回答
1

欢迎来到 LINQ 的世界!

MyClass andegre =
    myClasses.FirstOrDefault(item => item.MyClassValue.Equals("andegre"));
于 2012-11-06T13:43:38.623 回答