如何将关联索引添加到数组.C#

Bet*_*033 1 c# arrays

我有一系列自定义对象.例如,我希望能够通过特定的数据成员引用此数组myArrary["Item1"]

"Item1"实际上是存储在此自定义类型的Name属性中的值,我可以编写谓词来标记相应的数组项.但是我不清楚如何让数组知道我想使用这个谓词来查找数组项.

我想对这个数组使用字典或散列表或NameValuePair,并解决这个问题,但是它已经生成并且必须保持为CustomObj[].我也试图避免从这个数组加载一个字典,因为它会多次发生,并且可能有很多对象.

为了澄清

myArray[5] = new CustomObj() // easy!
myArray["ItemName"] = new CustomObj(); // how to do this? 
Run Code Online (Sandbox Code Playgroud)

以上可以做到吗?我真的只是在寻找类似于DataRow.Columns["MyColumnName"]工作方式的东西

感谢您的建议.

LBu*_*kin 5

你真正想要的是一个OrderedDictionary..NET在System.Collections.Specialized中提供的版本不是通用的 - 但是您可以使用CodeProject上通用版本.在内部,这实际上只是一个与列表结合的哈希表...但它以统一的方式暴露.

如果你真的想避免使用字典 - 那么你将不得不按键获得项目的O(n)查找性能.在这种情况下,坚持使用数组或列表,只需使用LINQ Where()方法查找值.您可以使用First()Single()取决于是否需要重复的条目.

var myArrayOfCustom = ...
var item = myArrayOfCustom.Where( x => x.Name = "yourSearchValue" ).First();
Run Code Online (Sandbox Code Playgroud)

将此功能包装到类中非常容易,这样外部使用者就不会受到这些知识的负担,并且可以使用简单的索引器来访问数据.如果您希望经常访问相同的值,则可以添加memoization等功能.通过这种方式,您可以分摊通过多次访问构建基础查找字典的成本.