我有这堂课:
public class Document
{
public string ID { get; set; }
public string Type { get; set; }
public bool Checked {get;set; }
}
我使用Enumerable.Repeat
静态方法创建了一组10个元素:
var list = Enumerable.Repeat<Document>(
new Document
{
ID="1",
Type ="someType"
Checked = true
}, 10).ToList<Document>();
这些创建10 Documents
具有相同的属性。我需要其中一些,例如,列表list
的前5个元素具有Checked
属性false
。
如何尽可能使用linq
?
答案 0 :(得分:3)
请注意,您的原始示例存在错误,因为它正在创建一个仅包含1个实际List<Document>
对象的10个元素Document
。这是一种更好的方法
Enumerable
.Range(1, 10)
.Select(i =>
new Document() {
ID = "1",
Type = "someType",
Checked = i <= 5
})
.ToList();
修改的
将代码更改为更简单。我原来的回答是编辑一个已经存在的列表,可以完成以下任务
list.Take(5).ForEach(x => { x.Checked = false });
请注意,您可能必须为此操作定义一个简单的ForEach
方法。如果你没有在这里定义一个是一个例子
static class Extensions {
internal static void ForEach<T>(this IEnumerable<T> e, Action<T> action) {
foreach (var item in e) {
action(item);
}
}
}
答案 1 :(得分:2)
替代想法来完成你要求的(也用“1”以外的东西填充你的ID列):
var list = Enumerable.Range(1, 10)
.Select(i => new Document
{
ID = i.ToString(),
Type = "someType",
Checked = (i > 5)
}).ToList();