Jawaban:
Sesuai MSDN
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
Ini akan membuat salinan dangkal dari IEnumerable saat ini dan mengubahnya menjadi ObservableCollection.
foreach untuk menyalin item ke koleksi internal, namun jika Anda melakukan foreach dan panggilan Add itu akan melaluiInsertItem yang melakukan banyak hal tambahan yang tidak perlu ketika awalnya mengisi menyebabkannya menjadi sedikit lebih lambat.
Jika Anda bekerja dengan non-generik IEnumerable Anda dapat melakukannya dengan cara ini:
public ObservableCollection<object> Convert(IEnumerable original)
{
return new ObservableCollection<object>(original.Cast<object>());
}Jika Anda menggunakan generik, IEnumerable<T>Anda dapat melakukannya dengan cara ini:
public ObservableCollection<T> Convert<T>(IEnumerable<T> original)
{
return new ObservableCollection<T>(original);
}Jika Anda bekerja dengan non-generik IEnumerabletetapi mengetahui jenis elemen, Anda bisa melakukannya dengan cara ini:
public ObservableCollection<T> Convert<T>(IEnumerable original)
{
return new ObservableCollection<T>(original.Cast<T>());
}Untuk membuat hal-hal menjadi lebih sederhana, Anda dapat membuat metode ekstensi dari itu.
public static class Extensions
{
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> col)
{
return new ObservableCollection<T>(col);
}
}
Kemudian Anda dapat memanggil metode pada setiap 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
C # Berfungsi untuk Mengubah IEnumerable menjadi 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;
}