C # - преобразовать тип Implict в ObservableCollection - PullRequest
5 голосов
/ 28 февраля 2010

У меня есть оператор LINQ, который возвращает неявный тип. Мне нужно, чтобы этот тип был ObservableCollection в моем приложении Silverlight 3. Конструктор ObservableCollection в Silverlight 3 предоставляет только пустой конструктор. Из-за этого я не могу напрямую преобразовать свои результаты в ObservableCollection. Вот мой код:

ObservableCollection<MyTasks> visibleTasks = e.Result;
var filteredResults = from visibleTask in visibleTasks
                      select visibleTask;

filteredResults = filteredResults.Where(p => p.DueDate == DateTime.Today);
visibleTasks = filteredResults.ToList();  // This throws a compile time error

Как я могу перейти от неявно типизированной переменной к наблюдаемой коллекции?

Спасибо

Ответы [ 3 ]

5 голосов
/ 28 февраля 2010

Вы можете добавить элементы вручную, например так:

visibleTasks = new ObservableCollection<MyTasks>();
foreach(var item in filteredResults)
    visibleTasks.Add(item);

Вы можете сделать это в одной строке, используя следующий метод расширения:

///<summary>Adds zero or more items to a collection.</summary>
public static void AddRange<TItem, TElement>(this ICollection<TElement> collection, IEnumerable<TItem> items)
    where TItem : TElement {
    if (collection == null) throw new ArgumentNullException("collection");
    if (items == null) throw new ArgumentNullException("items");

    foreach (var item in items)
        collection.Add(item);
}

visibleTasks = new ObservableCollection<MyTasks>();
visibleTasks.AddRange(filteredResults);
2 голосов
/ 28 февраля 2010

Вы можете написать метод расширения, который преобразует перечисление в ObservableCollection, например так:

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source)
{
  ObservableCollection<T> obsColl = new ObservableCollection<T>();
  foreach (T element in source)
  {
    obsColl.Add( element );
  }
  return obsColl;
}

Теперь вы можете вызвать следующее утверждение:

visibleTasks = filteredResults.ToObservableCollection();
1 голос
/ 28 февраля 2010

Используйте конструктор ObservableCollection<T>, который принимает IEnumerable<T>:

ObservableCollection<MyTasks> visibleTasks = e.Result;
var filteredResults = from visibleTask in visibleTasks
                      select visibleTask;

filteredResults = filteredResults.Where(p => p.DueDate == DateTime.Today);
visibleTasks = new ObservableCollection<MyTasks>(filteredResults);  // This throws a compile time error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...