【问题标题】:Modify all elements from a List<T> starting at an index从索引开始修改 List<T> 中的所有元素
【发布时间】:2022-09-23 20:56:08
【问题描述】:

我有一个 List&lt;MemberData&gt; storeCustomers 在 C# 中具有以下类型,

public class MemberData
{
   public string clientId;
   public string displayName;
   public bool isBlocked;
}

假设我的列表有 100 个成员,其 clientIddisplayName 不同,但都具有相同的 isBlocked = true。如果我想更改从索引 35 开始直到结束的同一字段,对于 isBlocked = false,我该怎么做?我想保持相同的列表并避免截断。

  • foreach(var item in list.Skip(35)) ?
  • foreach 或具有正确起始索引的 for 循环?
  • 你试过list.Skip(35).ToList() 吗?这将创建一个新列表,您可以在其中更改所有元素的属性。

标签: c# sorting


【解决方案1】:

您需要使用forforeach 循环,因为您需要对列表产生副作用。不要使用Select,除非重新分配整个列表变量是可以的。

您可以使用Skip Linq 方法忽略给定索引之前的所有条目。然后正常处理条目。

foreach (var entry in yourList.Skip(34)) // param is number of entries, not index
{
    entry.isBlocked = false;
}

如果重新分配列表变量是可以的,并且您需要做的唯一修改是根据索引更改isBlocked,那么您可以做一个单行

yourList = yourList.Select((x, i) => { x.isBlocked = i<=34; return x; }).ToList();

x 是源列表的每个元素,i 是索引。您可以从那里计算每个元素的 isBlocked 的值,并生成一个新列表,将其保存在原始列表之上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多