如何在C#中使用linq修改列表的某些元素?

时间:2014-01-20 17:59:24

标签: c# .net linq

我有这堂课:

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

来实现它

2 个答案:

答案 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();