我需要一个通用集合,该集合能够存储对象并根据对象的成员在O(1)时间内对其进行查询。考虑以下课程:
public class MyObject
{
public readonly int Id;
public string Name { get; set; }
public double Value { get; set; }
}
我想在集合中存储MyObject
实例,并能够使用具有(预期)O(1)查找的LINQ按字段/属性查询对象。本质上,成员的值将是匹配对象列表的键。
示例用法可能是:
var uniquePerson = collection.Query( x => x.Id == 10 ).First();
var peopleNamedTom = collection.Query( x => x.Name == "Tom" );
是否存在这样的集合?我猜不是,并且必须自己实现,它将涉及很多反射/动态IL。编写一个专门的字典对每个属性使用字典会容易得多,但是我的目标是使它尽可能通用和可重用。