我有一个对象列表,并且我需要编写一个方法,根据输入参数(一个Type数组),提取一些元素。该函数必须返回一个元素数组,其中每个元素都是Type数组中的一个元素的实例。同时,这些元素只有在它们全部存在于列表中时才能从容器列表中删除。使用
这段代码的结果将会是:
作为一个独立的努力,是否可能编写一个类似的ExtractElements方法,只返回非空数组,如果列表包含所请求类型的项目,并且它们在列表中的顺序与类型输入数组中元素的顺序相对应,如下所示。
该代码片段的结果将是:
Type.IsInstanceOfType(o)
方法进行类型比较。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
可以实现这个功能,但是很不幸的是我没有相关经验。