Search list of objects based on object variable

后端 未结 4 744
独厮守ぢ
独厮守ぢ 2021-02-13 14:30

I have a list of objects. These objects have three variables, ID, Name, & value. There can be a lot of objects in this list, and I need to find one based on the ID or Name

相关标签:
4条回答
  • 2021-02-13 14:50
    List<objec> TextPool = new List<objec>();
    objec found = TextPool.FirstOrDefault(item => item.Name == "test");
    if (found != null) found.value = "Value";
    

    If you are going to perform many lookups, you could cache the results in multiple Dictionary<> instances (or Lookup<> instance if keys are not unique).

    0 讨论(0)
  • 2021-02-13 14:56
    var find = TextPool.FirstOrDefault(x => x.Name == "test");
    if (find != null)
    {
        find.Name = "Value";
    }
    
    0 讨论(0)
  • 2021-02-13 15:00

    Sounds like a job for LINQ!

    var matchedObject =
       from t in TextPool
       where t.UName == "test"
       select t;
    

    This is assuming your search is defined in code. If your code is driven by the UI, you may simply need to do a linear iteration. To search all possible attributes, without indexing, it isn't going to get any faster.

    [ Edit: Was beaten to the punch, but leaving this up as an example of a different syntax, plus a link ]

    0 讨论(0)
  • 2021-02-13 15:11

    You could use LINQ to find it, then change the element directly:

    var item = TextPool.FirstOrDefault(o => o.Name == "test");
    if (item != null)
           item.value = "Value";
    

    If you wanted to change all elements that match, you could, potentially, even do:

    TextPool.Where(o => o.Name == "test").ToList().ForEach(o => o.value = "Value");
    

    However, I personally would rather split it up, as I feel the second option is less maintainable (doing operations which cause side effects directly on the query result "smells" to me)...

    0 讨论(0)
提交回复
热议问题