কীভাবে পর্যবেক্ষণযোগ্য সংকলনে আইইনামেবলকে রূপান্তর করবেন?


130

কীভাবে রূপান্তর IEnumerableকরবেন ObservableCollection?

উত্তর:


209

অনুযায়ী দুটিই MSDN

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

এটি বর্তমান আইউনামারেবলের অগভীর অনুলিপি তৈরি করবে এবং এটি পর্যবেক্ষণযোগ্য সংগ্রহের মধ্যে সরিয়ে ফেলবে।


সংগ্রহে আইটেমগুলি একের পর এক ?োকাতে ফোরিচ লুপ ব্যবহার করার চেয়ে কি দ্রুত?
রেজেক্সো

4
@ রেক্সক্সো এটি নির্মাণকারীর সাথে করা কিছুটা দ্রুত হবে। অভ্যন্তরীণভাবে এটি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);
    }
}

তারপরে আপনি প্রতিটি আইইনুমেবলের পদ্ধতিতে কল করতে পারেন

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

আইওনামারেবল অবজারভেবল কালেকশনে রূপান্তর করার জন্য সি # ফাংশন

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;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.