我有一系列自定义对象.例如,我希望能够通过特定的数据成员引用此数组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"]工作方式的东西
感谢您的建议.
你真正想要的是一个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等功能.通过这种方式,您可以分摊通过多次访问构建基础查找字典的成本.
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |