我有一個具有多個ObservableCollections的類用於不同類型。現在,我想通過反射爲給定類型找到正確的Collection,因爲我不想構建一個if-monster,每次添加另一個Collection時都必須更新它。通過反射爲給定/動態類型查找ObservableCollection
本方法的第一步:
public ObservableCollection<T> GetObservableCollectionForType<T>()
{
foreach (PropertyInfo info in this.GetType().GetProperties())
{
if (info.GetGetMethod() != null && info.PropertyType == typeof(ObservableCollection<T>))
return (ObservableCollection<T>)this.GetType().GetProperty(info.Name).GetValue(this, null);
}
return null;
}
現在,我需要的第二種方法,它接受一個具體的對象作爲參數,並找到正確的集合。不知怎的,像這樣:
public ObservableCollection<T> GetObservableCollectionFor(object sObject)
{
Type wantedType = sObject.GetType();
foreach (PropertyInfo info in this.GetType().GetProperties())
{
if (info.GetGetMethod() != null && info.PropertyType == ObservableCollection<wantedType>)
return this.GetType().GetProperty(info.Name).GetValue(this, null);
}
return null;
}
任何想法如何實現這一點?
更新:
A工作液:
public object GetObservableCollectionFor(object sObject)
{
Type wantedType = sObject.GetType();
foreach (PropertyInfo info in this.GetType().GetProperties())
{
if (info.GetGetMethod() != null && info.PropertyType == typeof(ObservableCollection<>).MakeGenericType(new[]{wantedType}))
return this.GetType().GetProperty(info.Name).GetValue(this, null);
}
return null;
}
這將返回正確的集合作爲對象。我仍然不知道如何投射到正確的通用類型,但投射到IList就足以添加和刪除。
你不能只是根據我更新的答案添加一個明確的強制轉換,並將返回類型保留爲ObservableCollection? –
twrowsell
看起來像編譯器不接受'ObservableCollection'作爲返回類型,只要方法調用沒有提供 –