Итерируйте и обновляйте элементы BindingList, используя одну строку

У меня есть BindingList, я хочу обновить некоторые элементы, но для того, чтобы использовать Foreach, доступный только для List<>, мне нужно инициализировать новый список с элементами BindingList. как это:

new List<ScanData>(ScanDataList)
.FindAll(i => i.Badge == badge)
.ForEach(x =>x.EmpName = empname);

И это самый простой способ, который я нашел, но я не хочу начинать с ключевого слова New, есть ли какой-либо другой более простой способ перебирать элементы BindingList и обновлять их, используя однострочную строку, как указано выше? (Я поставил его в три строки для удобства чтения). Я хотел бы просто удалить ключевое слово New, но это просто не работает, если новая функция помогает, что также приемлемо, если ее универсальный тип для любого BindingList будет идеальным.

  • Примечание: я использую компактный каркас 2.0
  • Я не хочу инициализировать переменную, которую я не собираюсь использовать.

Благодарю.

1 ответ

Этот вопрос немного глупый. Нет причин, по которым вы должны делать это в одной строке кода и избегать объявления переменной. Если вы используете оператор new, вы инициализируете экземпляр объекта, независимо от того, объявляете ли вы переменную для него или нет.

При этом я не знаю, какой у вас ScanDataList... Есть выражение linq, эквивалентное FindAll, называемое Where, которое может быть более эффективным, чем FindAll (поскольку ему не нужно создавать новый список, оно просто лениво повторяется). Если ваш ScanDataList уже IEnumerable, то вы, вероятно, можете сделать что-то вроде этого...

ScanDataList.Where (i => i.Badge == badge).ToList(). ForEach (x => x.EmpName = empname);

Даже если ваш ScanDataList не является перечисляемым, вы могли бы реализовать собственный метод расширения, чтобы помочь вам в этом, но кажется, что много работы для чего-то, что может быть легко достигнуто без произвольных ненужных ограничений (без новых, без переменных и т. Д.).).

Поэтому, чтобы уточнить, я бы, вероятно, использовал выражение.Where LINQ, потому что оно, вероятно, немного более эффективно, потому что ему не нужно создавать новый список. Однако, используя ту же логику, я бы, вероятно, избегал ToList() и разделял ваш код на две строки с чем-то вроде.

foreach(Employee emp in ScanDataList.Where(i => i.badge == badge))
  emp.EmpName = empname;

Таким образом, дополнительный список не создается.

Другие вопросы по тегам