Подтвердить что ты не робот

Поиск списка объектов на основе переменной объекта

У меня есть список объектов. Эти объекты имеют три переменные: идентификатор, имя и значение. В этом списке может быть много объектов, и мне нужно найти их на основе идентификатора или имени и изменить значение. Пример

class objec
{
    public string Name;
    public int UID;
    public string value;
}
List<objec> TextPool = new List<objec>();

Как я могу найти одну запись в TextPool с именем "test" и изменить ее значение на "Значение". В реальной программе есть много вариантов поиска и значений, которые необходимо изменить, поэтому я не мог просто использовать словарь (хотя имя и UID или уникальные идентификаторы). Любая помощь будет отличной

4b9b3361

Ответ 1

Вы можете использовать LINQ, чтобы найти его, а затем напрямую изменить элемент:

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

Если вы хотите изменить все элементы, которые соответствуют, вы могли бы, возможно, даже сделать:

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

Тем не менее, я лично предпочел бы разделить его, так как я чувствую, что второй вариант менее обслуживаем (выполнение операций, которые вызывают побочные эффекты непосредственно на результат запроса, "пахнет" мне)...

Ответ 2

var find = TextPool.FirstOrDefault(x => x.Name == "test");
if (find != null)
{
    find.Name = "Value";
}

Ответ 3

Звучит как работа для LINQ!

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

Предполагается, что ваш поиск определен в коде. Если ваш код управляется пользовательским интерфейсом, вам просто нужно выполнить линейную итерацию. Чтобы искать все возможные атрибуты, без индексирования, он не будет работать быстрее.

[Edit: был избит до удара, но оставил это как пример другого синтаксиса плюс ссылку]

Ответ 4

List<objec> TextPool = new List<objec>();
objec found = TextPool.FirstOrDefault(item => item.Name == "test");
if (found != null) found.value = "Value";

Если вы собираетесь выполнять много поисков, вы можете кэшировать результаты в нескольких экземплярах Dictionary < > экземпляры (или Lookup < > , если ключи не уникальны).