Новое присваивание List1 можно перехватить сеттером и вызвать событие. Изменения элементов обычного List этот сеттер не увидит — для них нужна ObservableCollection или методы-обёртки.
Добавление события, реагирующего на изменение списка List1
Новое присваивание List1 можно перехватить сеттером и вызвать событие. Изменения элементов обычного List этот сеттер не увидит — для них нужна ObservableCollection или методы-обёртки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В классе SomeClass есть свойство List1. Необходимо внедрить событие List1Changed, которое должно срабатывать каждый раз, когда список List1 изменяется (например, после присваивания нового значения). Это событие следует вызвать в текущем коде при выполнении фильтрации List1 в методе Method1().
public class SomeClass
{
public List<string> List1 {get;set;} = new List<string>() {"string", "string2", "string3"};
public void Method1()
{
var list2 = new List<string>(List1.Where(x => x.StartsWith()));
}
}
Ответ
Новое присваивание List1 можно перехватить сеттером и вызвать событие. Изменения элементов обычного List этот сеттер не увидит — для них нужна ObservableCollection или методы-обёртки.
Пример уведомления именно о замене списка:
public class SomeClass
{
private List<string> list1 = new() { "string", "string2", "string3" };
public event EventHandler? List1Changed;
public List<string> List1 {
get => list1;
set {
ArgumentNullException.ThrowIfNull(value);
if (ReferenceEquals(list1, value)) return;
list1 = value;
List1Changed?.Invoke(this, EventArgs.Empty);
}
}
public void Method1(string prefix) =>
List1 = List1.Where(x => x.StartsWith(prefix, StringComparison.Ordinal)).ToList();
}
В исходнике фильтрация лишь создаёт локальный list2 и не меняет List1. Кроме того, StartsWith требует аргумент. Для уведомлений об Add/Remove используйте ObservableCollection и CollectionChanged.