2010-06-29 38 views
1

如果我有一個像搜索集合在C#中的子類型/ LINQ的

List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>(); 

集合,我加入了兩個不同的子類型到這個集合(即兩個子類型從SomeAbstractBaseType繼承)這樣的:

someList.Add(someChildOfType1); 
someList.Add(someChildOfType2); 
someList.Add(someOtherChildOfType1); 
someList.Add(someOtherChildOfType2); 

說我想查詢someChildOfType1的所有元素。我怎樣才能做到這一點,我曾嘗試以下(不編譯,可從孩子型隱蔽於母公司型)

List<ChildType1> temp = someList.Where(x => x.GetType() == typeof(ChildType1)).ToList(); 

任何想法我怎麼能做到這一點?

+0

我無法弄清楚如何重現你的問題,因爲你的代碼爲我工作(沒有編譯器錯誤)。我已經編譯它在.NET 3.5/4.0,它都運行良好。無論哪種方式,你可以去'Enumerable.OfType ()'。 – Padel 2010-06-29 10:05:07

回答

0

Enumerable.OfType<T>()擴展方法。

4
List<ChildType1> temp = someList.OfType<ChildType1>().ToList(); 
0

Enumerable.OfType<T>()只適用於.NET 3.5和上方,看來,你需要一個解決方案,將工作在.NET 3.0

的問題是,即使你已經找到所有的亞型中,列表仍然是基本類型。做建設亞型的列表中選擇一個方法是使用ConvertAll投你知道是正確類型的對象:

List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);