जवाबों:
MSDN के अनुसार
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
यह वर्तमान IEnumerable की एक उथले प्रतिलिपि बना देगा और इसे एक ऑब्जर्वेबल कॉलेक्शन में बदल देगा।
foreach आंतरिक संग्रह में वस्तुओं को कॉपी करने के लिए एक का उपयोग कर रहा है , हालांकि अगर आप फोरचेक करते हैं और कॉल करते हैं तो Add यह हो जाएगाInsertItem जिसके माध्यम से बहुत अधिक अतिरिक्त सामान होता है जो शुरू में थोड़ा धीमा होने पर भरने के कारण अनुपस्थित होता है।
यदि आप गैर-जेनेरिक के साथ काम कर रहे हैं तो आप 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>());
}चीजों को और अधिक सरल बनाने के लिए आप इसमें से एक एक्सटेंशन विधि बना सकते हैं ।
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();
ObservableCollection<decimal> distinctPkgIdList = new ObservableCollection<decimal>();
guPackgIds.Distinct().ToList().ForEach(i => distinctPkgIdList.Add(i));
// distinctPkgIdList - ObservableCollection
// guPackgIds.Distinct() - IEnumerable
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;
}