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


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.