Как преобразовать IEnumerable в ObservableCollection?
Как преобразовать IEnumerable в ObservableCollection?
Ответ 1
В соответствии с MSDN
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
Это сделает мелкую копию текущего IEnumerable и превратит его в ObservableCollection.
Ответ 2
-  
Если вы работаете с универсальным
IEnumerable, вы можете сделать это следующим образом:public ObservableCollection<object> Convert(IEnumerable original) { return new ObservableCollection<object>(original.Cast<object>()); } -  
Если вы работаете с общим
IEnumerable<T>, вы можете сделать это следующим образом:public ObservableCollection<T> Convert<T>(IEnumerable<T> original) { return new ObservableCollection<T>(original); } -  
Если вы работаете с не общим
IEnumerable, но знаете тип элементов, вы можете сделать это следующим образом:public ObservableCollection<T> Convert<T>(IEnumerable original) { return new ObservableCollection<T>(original.Cast<T>()); } 
Ответ 3
Чтобы сделать вещи еще более простыми, вы можете создать Extension метод.
public static class Extensions
{
    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
    {
        return new ObservableCollection<T>(col);
    }
}
Затем вы можете вызвать метод на каждом IEnumerable
var lst = new List<object>().ToObservableCollection();
		Ответ 4
ObservableCollection<decimal> distinctPkgIdList = new ObservableCollection<decimal>();
guPackgIds.Distinct().ToList().ForEach(i => distinctPkgIdList.Add(i));
// distinctPkgIdList - ObservableCollection
// guPackgIds.Distinct() - IEnumerable 
		Ответ 5
Функция С# для преобразования 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;
    }