У меня есть список объектов. Эти объекты имеют три переменные, идентификатор, Имя, и значение. Может быть много объектов в этом списке, и я должен найти один на основе идентификатора или Имени, и изменить значение. Пример
class objec
{
public string Name;
public int UID;
public string value;
}
List<objec> TextPool = new List<objec>();
Как я нашел бы одну запись в TextPool, который имел Название 'теста', и измените его значение для 'Оценивания'. Реальная программа имеет намного больше параметров поиска и значений, которым нужно изменение, таким образом, я не мог только использовать Словарь (хотя Имя и UID или уникальные идентификаторы). Любая справка была бы большой
Вы можете использовать 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");
Однако я лично предпочел бы разделить его, так как я считаю, что второй вариант менее удобен в обслуживании (выполнение операций, вызывающих побочные эффекты непосредственно в результате запроса, «пахнет» для меня). .
Похоже, работа для LINQ !
var matchedObject =
from t in TextPool
where t.UName == "test"
select t;
Предполагается, что ваш поиск определен в коде. Если ваш код управляется пользовательским интерфейсом, вам может просто потребоваться линейная итерация. Искать все возможные атрибуты без индексации быстрее не получится.
[Edit: был избит до мозга костей, но оставил это как пример другого синтаксиса плюс ссылку]
List<objec> TextPool = new List<objec>();
objec found = TextPool.FirstOrDefault(item => item.Name == "test");
if (found != null) found.value = "Value";
Если вы собираетесь выполнять много поиска, вы можете кэшировать результаты в нескольких экземплярах Dictionary <> (или экземплярах Lookup <>, если ключи не уникальны).
var find = TextPool.FirstOrDefault(x => x.Name == "test");
if (find != null)
{
find.Name = "Value";
}