2016-11-25 30 views
1

我遇到了麻煩。接收和使用任何類型的ObservableCollection <T>

我想收到任何集合,類型的ObservableCollection並使用它。

例如,有一類像下面

public class Car{ 
    int num; 
    string str; 
} 

和的ObservableCollection

ObservableCollection<Car> carOC = new ObservableCollection<Car>(); 

真正重要的一點是,其實我不知道它的存在。我不知道ObservableCollection<T>的類型T是什麼。

我想提出的是用於顯示像下面

void showingProperties(ObservableCollection<T> coll) 
{ 
    foreach (T item in coll){ 
     // showing item's property list 
    } 
} 

收到ObservableCollection<T>的屬性列表的方法,如果我用這個方法carOC

showingProperties(carOC); 

輸出

carOC has properties 
num type int32 
str type string 

我真的不知道接收什麼東西ObservableCollection<T>並使用它... 感謝您的閱讀。

回答

2

事實上,您的問題沒有做任何事情與ObservableCollection<T>。你可以對任何泛型集合做同樣的事情。只是爲了澄清,ObservableCollection<T>觀察您的列表和項目,以便它會給您關於列表中的更改信息。它不會觀察你的班級結構。在List上做這件事沒有什麼意義,因爲你的T將在你的列表中多次存在,但信息對每個對象都是一樣的。所以我會推薦一種方法,它可以爲你提供這種類型的信息。看到它基於不基於對象的類型。

public string ShowProperties<T>() : where T : class 
{ 
    var props = typeof (T).GetProperties(BindingFlags.Instance | BindingFlags.Public); 

    string typeInfo = typeof (T).FullName + Environment.NewLine; 
    foreach (var prop in props) 
    { 
     typeInfo += prop.Name + " " + prop.PropertyType.FullName + Environment.NewLine; 
    } 

    return typeInfo; 
} 

如果您的列表中有不同的項目,由於繼承在您的foreach循環中調用此次次。但是,如果您在循環中使用它,請小心謹慎。然後考慮緩存。

+0

非常感謝你!我會嘗試引用它! – wallah

+0

@wallah你的歡迎。 – Sebi

相關問題