如何把IEnumerable
轉換成ObservableCollection
?如何將IEnumerable轉換爲ObservableCollection?
94
A
回答
154
由於每MSDN
var myObservableCollection = new ObservableCollection<YourType>(myIEnumerable);
這將使目前的IEnumerable的淺拷貝,並把它在一個的ObservableCollection。
57
如果您正在使用非通用
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>()); }
24
爲了讓事情變得更加簡單,你可以從它創建一個Extension方法。
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
的C#功能的方法來轉換了IEnumerable到的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;
}
相關問題
- 1. 將IEnumerable轉換爲ObservableCollection
- 2. 如何將IEnumerable轉換爲JSON?
- 3. 如何將IEnumerable轉換爲Subsonic集合?
- 4. 將IEnumerable轉換爲列表
- 5. 將IEnumerable轉換爲DataTable
- 6. 如何將`IEnumerable <Unknown T>`轉換爲`IEnumerable <Whatever>`
- 7. 如何將managementobject集合轉換爲IEnumerable <IEnumerable <IPropertyData >>?
- 8. 如何將IEnumerable <IEnumerable <T>>轉換爲IEnumerable <T>
- 9. 無法將IEnumerable類型轉換爲ObservableCollection ...您是否遺漏了演員名單?
- 10. 將ObservableCollection轉換爲Silverlight中的數組
- 11. C# - 將匿名類型轉換爲observablecollection
- 12. 將LINQ結果轉換爲ObservableCollection
- 13. 如何轉換ICollection至IEnumerable?
- 14. C#使用.ToList()將IEnumerable轉換爲IList?
- 15. 將IEnumerable <XElement>轉換爲XElement
- 16. 將DataRowCollection轉換爲IEnumerable <T>
- 17. 將IEnumerable <dynamic>轉換爲DataTable
- 18. 將IEnumerable <dynamic>轉換爲JsonArray
- 19. 將實體對象轉換爲IEnumerable
- 20. 將IEnumerable <int>轉換爲int []
- 21. 將Linq ObjectQuery IQueryable轉換爲IEnumerable
- 22. 將ObservableCollection <T>轉換爲ObservableCollection <String>
- 23. 如何將DbSet轉換爲WPF中的observableCollection?
- 24. 如何在VB.NET中將List(Of T)轉換爲ObservableCollection(Of T)?
- 25. 如何將ObservableCollection從C#轉換爲XML文件?
- 26. 如何從IEnumerable轉換爲IEnumerable <T>?
- 27. 隱式轉換IEnumerable轉換爲泛型
- 28. 如何將List <IEnumerable <ProductViewModel >>轉換爲<IEnumerable <ProductViewModel >>?
- 29. 如何將IEnumerable <IEnumerable <T>>轉換爲列表<string>?
- 30. 在C#中,如何將IEnumerable <IMyInterface>的數組轉換爲IEnumerable <T>?
這是比使用foreach循環更快將這些項目逐一插入集合中? – Rexxo 2016-08-31 12:49:16
@Rexxo用構造函數做它會稍微快一點。在內部[它使用'foreach'](http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#cfaa9abd8b214ecb)將項目複製到內部集合,但是如果你做foreach並調用'Add' [它將通過'InsertItem'](http://referencesource.microsoft.com/System/compmod/system/collections/objectmodel/observablecollection.cs.html#767bf62bf4a3a7c1)很多額外的東西,當初步填充時會使它稍微慢一些。 – 2016-08-31 13:05:23