Как конвертировать IEnumerable в ObservableCollection?

Как преобразовать IEnumerable в ObservableCollection?

c#
108 голосов | спросил KentZhou 24 PM000000100000005431 2010, 22:37:54

5 ответов


0

Согласно MSDN

var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);

Это сделает поверхностную копию текущего IEnumerable и превратит его в ObservableCollection.

ответил Scott Chamberlain 24 PM000000100000003031 2010, 22:39:30
0
  1. Если вы работаете с неуниверсальными IEnumerable, вы можете сделать это следующим образом:

    public ObservableCollection<object> Convert(IEnumerable original)
    {
        return new ObservableCollection<object>(original.Cast<object>());
    }
    
  2. Если вы работаете с универсальным IEnumerable<T>, вы можете сделать это следующим образом:

    public ObservableCollection<T> Convert<T>(IEnumerable<T> original)
    {
        return new ObservableCollection<T>(original);
    }
    
  3. Если вы работаете с неуниверсальными IEnumerable, но знаете тип элементов, это можно сделать следующим образом:

    public ObservableCollection<T> Convert<T>(IEnumerable original)
    {
        return new ObservableCollection<T>(original.Cast<T>());
    }
    
ответил Elisha 24 PM000000100000000731 2010, 22:40:07
0

Чтобы сделать вещи еще проще, вы можете создать из него расширение .

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();
ответил markwilde 6 22012vEurope/Moscow11bEurope/MoscowTue, 06 Nov 2012 23:01:58 +0400 2012, 23:01:58
0
ObservableCollection<decimal> distinctPkgIdList = new ObservableCollection<decimal>();
guPackgIds.Distinct().ToList().ForEach(i => distinctPkgIdList.Add(i));

// distinctPkgIdList - ObservableCollection
// guPackgIds.Distinct() - IEnumerable 
ответил Sudharshan 16 J0000006Europe/Moscow 2014, 10:11:34
0

Функция C # для преобразования 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;
    }
ответил B.Balamanigandan 16 12015vEurope/Moscow11bEurope/MoscowMon, 16 Nov 2015 15:37:42 +0300 2015, 15:37:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132