Comment convertir les IEnumerable
à ObservableCollection
?Comment convertir IEnumerable en ObservableCollection?
94
A
Répondre
154
Selon le MSDN
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
Cela fera une copie superficielle du courant IEnumerable et tourner dans un ObservableCollection.
57
Si vous travaillez avec
IEnumerable
non-générique, vous pouvez le faire de cette façon:public ObservableCollection<object> Convert(IEnumerable original) { return new ObservableCollection<object>(original.Cast<object>()); }
Si vous travaillez avec
Si vous travaillez avecIEnumerable<T>
générique vous pouvez le faire de cette façon:IEnumerable
non-générique mais connaissez le type d'éléments, vous pouvez le faire de cette manière:public ObservableCollection<T> Convert<T>(IEnumerable original) { return new ObservableCollection<T>(original.Cast<T>()); }
24
Pour rendre les choses encore plus simple, vous pouvez créer une méthode Extension hors de celui-ci.
public static class Extensions
{
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
{
return new ObservableCollection<T>(col);
}
}
Ensuite, vous pouvez appeler la méthode sur chaque IEnumerable
var lst = new List<object>().ToObservableCollection();
3
ObservableCollection<decimal> distinctPkgIdList = new ObservableCollection<decimal>();
guPackgIds.Distinct().ToList().ForEach(i => distinctPkgIdList.Add(i));
// distinctPkgIdList - ObservableCollection
// guPackgIds.Distinct() - IEnumerable
1
C# Fonction pour convertir le IEnumerable ObservableCollection
private ObservableCollection<dynamic> IEnumeratorToObservableCollection(IEnumerable source)
{
ObservableCollection<dynamic> SourceCollection = new ObservableCollection<dynamic>();
IEnumerator enumItem = source.GetEnumerator();
var gType = source.GetType();
string collectionFullName = gType.FullName;
Type[] genericTypes = gType.GetGenericArguments();
string className = genericTypes[0].Name;
string classFullName = genericTypes[0].FullName;
string assName = (classFullName.Split('.'))[0];
// Get the type contained in the name string
Type type = Type.GetType(classFullName, true);
// create an instance of that type
object instance = Activator.CreateInstance(type);
List<PropertyInfo> oProperty = instance.GetType().GetProperties().ToList();
while (enumItem.MoveNext())
{
Object instanceInner = Activator.CreateInstance(type);
var x = enumItem.Current;
foreach (var item in oProperty)
{
if (x.GetType().GetProperty(item.Name) != null)
{
var propertyValue = x.GetType().GetProperty(item.Name).GetValue(x, null);
if (propertyValue != null)
{
PropertyInfo prop = type.GetProperty(item.Name);
prop.SetValue(instanceInner, propertyValue, null);
}
}
}
SourceCollection.Add(instanceInner);
}
return SourceCollection;
}
Questions connexes
- 1. Comportement du constructeur ObservableCollection (IEnumerable)
- 2. Comment convertir IEnumerable en collection Subsonic?
- 3. C# - convertir un type anonyme en observablecollection
- 4. Comment convertir un IEnumerable <IEnumerable <T>> en IEnumerable <T>
- 5. LINQ: Convertir en IEnumerable de WhereSelectEnumerableIterator
- 6. Convertir IEnumerable <XElement> en XElement
- 7. Convertir Linq ObjectQuery IQueryable en IEnumerable
- 8. Comment convertir IEnumerable <table> en XML de Nhibernate?
- 9. collection Convertir de IEnumerable LINQ
- 10. ObservableCollection wrapper à convertir en un type de base
- 11. Convertir IEnumerable EntityCollection Entity Framework 4
- 12. C# Impossible de convertir IEnumerable <Base> en IEnumerable <Derived>
- 13. ObservableCollection
- 14. Comment paginer une ObservableCollection?
- 15. Comment convertir une List (Of T) en une ObservableCollection (Of T) dans VB.NET?
- 16. Comment fonctionne ObservableCollection?
- 17. Custom ObservableCollection
- 18. WPF ObservableCollection dans xaml
- 19. IEnumerable chaîne
- 20. ObservableCollection découper en utilisant lambda
- 21. Linq: Convertir IEnumerable <Point> à un IEnumerable <float>
- 22. Comment convertir IEnumerable <char> en string [] afin que je puisse l'utiliser avec String.Join?
- 23. Comment convertir un DataTable en IEnumerable <Dictionary <string, object >>?
- 24. Comment mettre en cache IEnumerable var
- 25. LINQ: Comment déclarer IEnumerable [AnonymousType]?
- 26. ObservableCollection DataGrid
- 27. Comment implémenter IEnumerable?
- 28. Tutoriel ObservableCollection?
- 29. Comment puis-je réduire IEnumerable <IEnumerable <Foo>> à IEnumerable <Foo>?
- 30. Comment puis-je créer une propriété ObservableCollection en lecture seule?
Est-ce plus rapide que d'utiliser une boucle foreach pour insérer les articles un par un dans la collection? – Rexxo
@Rexxo il sera légèrement plus rapide de le faire avec le constructeur. En interne [il utilise un 'foreach'] (http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#cfaa9abd8b214ecb) pour copier les éléments dans la collection interne, mais si vous faites le foreach et appelez 'Add' [il passera par' InsertItem'] (http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#767bf62bf4a3a7c1) qui fait beaucoup de choses supplémentaires qui sont inutiles lors du remplissage initial, ce qui le rend légèrement plus lent. –