Cómo convertir IEnumerable
a ObservableCollection
?Cómo convertir IEnumerable a ObservableCollection?
94
A
Respuesta
154
Según el MSDN
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
Esto hará una copia superficial de la corriente IEnumerable y convertirlo en un ObservableCollection.
57
Si está trabajando con no genérico
IEnumerable
puede hacerlo de esta manera:public ObservableCollection<object> Convert(IEnumerable original) { return new ObservableCollection<object>(original.Cast<object>()); }
Si está trabajando con
IEnumerable<T>
genérica que puede hacerlo de esta manera:public ObservableCollection<T> Convert<T>(IEnumerable<T> original) { return new ObservableCollection<T>(original); }
Si está trabajando con
IEnumerable
no genérico pero conoce el tipo de elementos, puede hacerlo de esta manera:public ObservableCollection<T> Convert<T>(IEnumerable original) { return new ObservableCollection<T>(original.Cast<T>()); }
24
Para hacer las cosas aún más simple que se puede crear un método Extension fuera de él.
public static class Extensions
{
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
{
return new ObservableCollection<T>(col);
}
}
A continuación, se puede llamar al método en cada 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
El C# Función para convertir el IEnumerable a 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;
}
Cuestiones relacionadas
- 1. Cómo convertir la lista a ObservableCollection?
- 2. Cómo convertir un IEnumerable <IEnumerable <T>> a un IEnumerable <T>
- 3. Convertir a formato de la lista IEnumerable
- 4. Convertir/Convertir IEnumerable en IEnumerable <T>
- 5. Convertir IEnumerable <T> a string []
- 6. Convertir DataTable a IEnumerable <T>
- 7. Convertir LINQ ObjectQuery IQueryable a IEnumerable
- 8. C# - convertir el tipo anónimo en observablecollection
- 9. IEnumerable a cadena
- 10. Merged ObservableCollection
- 11. ¿Es posible convertir GroupCollection a List o IEnumerable?
- 12. C# No se puede convertir de IEnumerable <Base> a IEnumerable <Derived>
- 13. Resultado Cast LINQ para ObservableCollection
- 14. Vinculable ObservableCollection <> a un TextBox
- 15. cómo ordenar ObservableCollection
- 16. C# - IEnumerable a cadena delimitada
- 17. ObservableCollection tutorial?
- 18. IList <T> a ObservableCollection <T>
- 19. Agregar elementos de IList a ObservableCollection
- 20. Clasificación ObservableCollection
- 21. IEnumerable <string> a cadena
- 22. IEnumerable a EntitySet
- 23. Encuadernación WPF Canvas Children a una ObservableCollection
- 24. Encuadernación ObservableCollection items a UserControl en WrapPanel?
- 25. Fundir/Convertir IEnumerable <T> en IEnumerable <U>?
- 26. Cómo convertir IEnumerable <char> a string [] para que pueda usarlo con String.Join?
- 27. Cómo convertir IEnumerable <string> a una cadena separada por comas?
- 28. ¿Cómo puedo convertir un DataTable a un IEnumerable <Dictionary <string, object >>?
- 29. La mejor manera de convertir Lista <Object> a ObservableCollection <Object>
- 30. Enlazar una ObservableCollection a un ListView
¿Este rápido que el uso de un bucle foreach para inserte los artículos uno por uno en la colección? – Rexxo
@Rexxo será un poco más rápido hacerlo con el constructor. Internamente [está utilizando un 'foreach'] (http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#cfaa9abd8b214ecb) para copiar los elementos a la colección interna, sin embargo si usted hace el foreach y llama a 'Add' [irá a través de' InsertItem'] (http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#767bf62bf4a3a7c1) que lo hace una gran cantidad de material extra que no es esencial cuando se llena por primera vez, lo que hace que sea un poco más lento. –