Поиск списка объектов на основе переменной объекта
У меня есть список объектов. Эти объекты имеют три переменные: идентификатор, имя и значение. В этом списке может быть много объектов, и мне нужно найти их на основе идентификатора или имени и изменить значение.
Пример
class objec
{
public string Name;
public int UID;
public string value;
}
List<objec> TextPool = new List<objec>();
Как я могу найти одну запись в TextPool с именем "test" и изменить ее значение на "Значение".
В реальной программе есть много вариантов поиска и значений, которые необходимо изменить, поэтому я не мог просто использовать словарь (хотя имя и UID или уникальные идентификаторы).
Любая помощь будет отличной
Ответы
Ответ 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 < > , если ключи не уникальны).