我有一個對象列表,我必須編寫一個方法,根據輸入參數(這是一個Type的數組)提取一些元素。該函數必須從列表中返回一個元素數組,每個元素都是類型數組中的一個元素的一個實例。同時,這些元素必須從容器列表中刪除,但前提是它們必須存在於列表中。型號比較通過Type.IsInstanceOfType(o)
方法實現。提取與LINQ的特定類型的列表元素
class A {}
class B : A {}
class C : A {}
class D : A {}
public static A[] ExtractElements (List<A> list, Type[] specifiers) {...}
Type[] specifiers1 = new Type[2] {typeof(D), typeof(B)};
Type[] specifiers2 = new Type[3] {typeof(C), typeof(A), typeof(D)};
Type[] specifiers3 = new Type[2] {typeof(A), typeof(A)};
Type[] specifiers4 = new Type[2] {typeof(C), typeof(C)};
List<A> list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result1 = ExtractElements (list, specifiers1);
list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result2 = ExtractElements (list, specifiers2);
list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result3 = ExtractElements (list, specifiers3);
list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result4 = ExtractElements (list, specifiers4);
這個代碼段的結果將是:
result1 is {D, B}, list is {A, C, A}
result2 is {C, B, D}, list is {A, A}
result3 is {B, A}, list is {D, C, A}
result4 is empty array, list is {B, A, D, C, A}
作爲一個單獨的努力將是可能的,如果列表中包含的請求項目寫入類似ExtractElements方法,該方法僅返回非空數組類型在列表中,其順序對應於類型的輸入數組中的元素的這樣的代碼片段的以下
Type[] specifiers5 = new Type[2] {typeof(B), typeof(D)};
Type[] specifiers6 = new Type[2] {typeof(C), typeof(B)};
List<A> list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result5 = ExtractElements (list, specifiers5);
list = new List<A> {new B(), new A(), new D(), new C(), new A()};
A[] result6 = ExtractElements (list, specifiers6);
結果的順序將是:
result5 is {B, D}, list is {A, C, A}
result6 is empty array, list is {B, A, D, C, A}
我知道LINQ
是實現這種方式,但不幸的是,我與它沒有任何經驗。
似乎要做的伎倆。我有一個控制檯應用程序和一個工作示例。 – 2013-02-26 19:27:14