gpt4 book ai didi

c# - 更新 IEnumerable 中的项目

转载 作者:可可西里 更新时间:2023-11-01 08:36:25 26 4
gpt4 key购买 nike

我需要更新 IEnumerable 列表中的值。

这是一个简短的 IEnumerable 示例:

IEnumerable<string> allsubdirs = new List<string>() { "a", "b", "c" };

现在,如果我想为每个项目添加时间戳,这是行不通的:

allsubdirs.Select(a => a = a + "_" + DateTime.Now.ToString("hhmmss")).ToList();

这也不是:

foreach (var item in allsubdirs)
item = item + "_" + DateTime.Now.ToString("hhmmss");

我让它像这样工作:

IEnumerable<string> newallsubdirs = allsubdirs.Select(a => a + "_" + DateTime.Now.ToString("hhmmss")).ToList();
allsubdirs = newallsubdirs;

但这在某种程度上看起来像是作弊。请问这样做的正确方法是什么?

最佳答案

Linq 用于查询,而不是更新。 Linq 查询根据投影、过滤器等返回集合(或源集合之上的迭代器)。因此您的选择是:

  • 将"new"集合保存回变量(或新变量,如有必要):

      allsubdirs = allsubdirs.Select(a => a = a + "_" + DateTime.Now.ToString("hhmmss")).ToList();
  • 使用像IList<T>这样的可写接口(interface)和一个 for循环:

      IList<string> allsubdirs = new List<string>() { "a", "b", "c" };

    for(int i=0; i<allsubdirs.Count(); i++)
    allsubdirs[i] = allsubdirs[i] + "_" + DateTime.Now.ToString("hhmmss");

主要区别在于 Select 不修改原始集合,而 for循环确实如此。

我的意见是 Select更干净并且不是“作弊” - 您只是在原始集合之上添加了一个投影。

关于c# - 更新 IEnumerable 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com