Как предполагает Экин, вы можете написать универсальный метод, который превращает любой IEnumerable<T>
в ObservableCollection<T>
. Это имеет одно существенное преимущество перед созданием нового экземпляра ObservableCollection
с использованием конструктора - компилятор C # может автоматически выводить параметр универсального типа при вызове метода, поэтому вам не нужно писать тип элементов. Это позволяет вам создавать коллекцию анонимных типов, что иначе было бы невозможно (например, при использовании конструктора).
Одним из улучшений по сравнению с версией Экина является написание метода как метода расширения. Следуя обычному шаблону именования (например, ToList
или ToArray
), мы можем назвать его ToObservableCollection
:
static ObservableCollection<T> ToObservableCollection<T>
(this IEnumerable<T> en) {
return new ObservableCollection<T>(en);
}
Теперь вы можете создать наблюдаемую коллекцию, содержащую анонимные типы, возвращаемые из запроса LINQ, например:
var oc =
(from t in visibleTasks
where t.IsSomething == true
select new { Name = t.TaskName, Whatever = t.Foo }
).ToObservableCollection();