c# - 使用 LINQ 提取特定类型的列表元素

标签 c# linq list extract

我有一个对象列表,我必须编写一个方法来根据作为类型数组的输入参数提取一些元素。该函数必须从列表中返回一个元素数组,每个元素都是类型数组中一个元素的实例。同时,必须从容器列表中删除这些元素,但前提是它们都存在于列表中。类型比较通过 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 是实现这一点的方法,但遗憾的是我没有这方面的经验。

最佳答案

这听起来非常适合 Enumerable.OfType<T>() .

关于c# - 使用 LINQ 提取特定类型的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096478/

相关文章:

c# - Visual Studio 2013 的功能区设计器

c# - 如何删除 Azure 文件存储文件夹中的所有文件?

c# - 如果元素中存在属性,则将 XAttribute 添加到 XElement

c# - LINQ foreach 循环中的 System.Linq.Enumerable+d__3a`1[System.String] 错误

java - Java中.add()返回一个 boolean 值,如何以列表形式返回

c# - 将字节数组转换为 BitmapImage 时为 “Unspecified error”

C# foreach 循环仅在整个 json 文件中显示 2 个结果

C# Linq 列表包含相似元素

python - 在 python 中保持格式的同时将字符串列表转换为整数

list - Grails中所有域类的列表