IEnumerable को ObservableCollection में कैसे बदलें?


130

कैसे कन्वर्ट करने के लिए IEnumerableकरने के लिए ObservableCollection?

जवाबों:


209

MSDN के अनुसार

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

यह वर्तमान IEnumerable की एक उथले प्रतिलिपि बना देगा और इसे एक ऑब्जर्वेबल कॉलेक्शन में बदल देगा।


क्या यह संग्रह में एक-एक करके आइटम डालने के लिए ForEach लूप का उपयोग करने से तेज है?
Rexxo

4
@Rexxo यह कंस्ट्रक्टर के साथ करने के लिए थोड़ा तेज़ होगा। आंतरिक रूप से यहforeach आंतरिक संग्रह में वस्तुओं को कॉपी करने के लिए एक का उपयोग कर रहा है , हालांकि अगर आप फोरचेक करते हैं और कॉल करते हैं तो Add यह हो जाएगाInsertItem जिसके माध्यम से बहुत अधिक अतिरिक्त सामान होता है जो शुरू में थोड़ा धीमा होने पर भरने के कारण अनुपस्थित होता है।
स्कॉट चैंबरलेन


74
  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>());
    }

29

चीजों को और अधिक सरल बनाने के लिए आप इसमें से एक एक्सटेंशन विधि बना सकते हैं ।

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();

3
ObservableCollection<decimal> distinctPkgIdList = new ObservableCollection<decimal>();
guPackgIds.Distinct().ToList().ForEach(i => distinctPkgIdList.Add(i));

// distinctPkgIdList - ObservableCollection
// guPackgIds.Distinct() - IEnumerable 

1

IEnumerable को ObservableCollection में बदलने के लिए C # फ़ंक्शन

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;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.