是否有一个集合,不仅可以通过键来查找项目,还可以查找项目的属性?

时间:2017-08-05 06:25:06

标签: c# collections

我正在尝试找出最有效的方法来查找我的收藏中的项目。首先,这里有一些更多的信息/要求:

  • 订单并不重要。
  • 必须使用枚举查找。
  • 收集量非常大,但最初不会被修改 填充。
  • 必须能够按键(字符串)查找,但也可以通过项目类型的两个属性之一进行查找。

我目前正在使用一个继承自KeyedCollection的自定义集合,该集合使用GetKeyForItem()从项目中提取字符串,以用作密钥,到目前为止一切正常。

问题在于我希望能够查找项目的方式。我的理解是,除了'脏'枚举之外,使用与添加项相同的方法查找项目,无论是使用自定义相等比较器还是使用密钥。

我错过了什么吗?是否可以接受的做法是创建三个具有相同项目的集合,但对于我希望能够查找的每个属性具有不同的GetKeyFoItem()实现?或者我可以使用另一个系列吗?

我希望这足以说明我的问题。我很感激您的任何建议。

1 个答案:

答案 0 :(得分:0)

尝试使用Linq! Linq是非常强大的东西!

这是一个小例子......

    public class YourClass
    {
        public int ClassIntProperty { get; set; }
        public string ClassStringProperty { get; set; }
    }
    List<YourClass> YourClassItemsList = new List<YourClass>();

    public void SeekItem()
    {
        //Get several items
        var t = YourClassItemsList.Where(item => item.ClassIntProperty == 0).AsEnumerable();
        var tt = YourClassItemsList.Where(item => item.ClassStringProperty == "abc").AsEnumerable();

        //Get one item
        var ttt = YourClassItemsList.FirstOrDefault(item => item.ClassIntProperty == 0);
    }