2012-11-06 72 views
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[GetIndexOfOfMyClassName("andegre")]; 

MyClass andegre = myClasses["andegre"]; 

做这样的事情而不是

TIA

+1

你真的应该创建另一个类[MyClassCollection]与[indexer](http://msdn.microsoft.com/zh-cn/library/2549tw02.aspx)。 –

+0

考虑使用字典? – Hardrada

回答

1

欢迎来到LINQ的世界!

MyClass andegre = 
    myClasses.FirstOrDefault(item => item.MyClassValue.Equals("andegre")); 
+0

啊,我还没有使用LINQ,可能是我的时间....谢谢! – ganders

3

对于自定义索引在现有的收集工作,该集合将需要自定义集合与您实现indexer,它可以成为你想带着你想它背后的任何逻辑的任何参数。采用字符串的自定义索引器完全可以用于自定义类型。

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

另外,为了查询你想要的数据,你可以使用LINQ to Objects(简称LINQ)作为其他答案的建议。

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 
}