簡體   English   中英

Linq 用於對象列表,收集其字段

[英]Linq for list of objects make a collection of its fields

LINQ 可以寫得更短嗎?

class MyClass
{
    public int Field1;
    public int Field2;
}

var src = new List<MyClass>
{
    new MyClass{Field1 = 0, Field2 = 1},
    new MyClass{Field1 = 2, Field2 = 3}
};

var list = new List<int>();
foreach (var item in src)
{
    list.Add(item.Field1);
    list.Add(item.Field2);
}

最后, list是這樣的:0、1、2、3。

是的,您可以將int值放入一個數組並使用SelectMany展平 arrays:

var list = src.SelectMany(x => new[] { x.Field1, x.Field2 }).ToList();

為了完成,如果您想對 class 中的所有公共int字段執行此操作而無需手動指定它們,您可以使用反射:

var fields = typeof(MyClass).GetFields().Where(f => f.FieldType == typeof(int));
var list = src.SelectMany(x => fields.Select(f => (int)f.GetValue(x))).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM