如何对字符串列表的每个值调用函数并更改它

本文关键字:函数 值调用 字符串 列表 | 更新日期: 2023-09-27 17:56:14

我有一个字符串列表,我想检查它们是否对应于特定形式。如果不是,我不想改变这一点。但是我没有找到一种很好的方法来迭代列表的元素并更改它们。我试图检查list.ForEach(tag => tag = foo(tag))但这并没有改变任何东西,并且使用foreach (tag in tags)循环,它也(当然)不起作用。

这是我的代码分解为问题:(这段代码有效,但我希望在 Main 方法中的注释中更短)

class Sheet
{
  public string Name;
  public List<string> tags;
  public Sheet()
  {
    tags = new List<string>();
  }
}
class TagCleaner
{  
  public static string foo(string tag)
  {
    tag = tag.Replace("_", " ");
    return tag;
  }
}
static void Main()
{
  Sheet s = new Sheet();
  s.tags.Add("this is Valid");
  s.tags.Add("this_isn't");
  // is that somehow possible nicer?
  for (int i = 0; i < s.tags.Count; i++)
  {
    s.tags[i] = TagCleaner.foo(s.tags[i]);
  }
}

感谢您的帮助:)

如何对字符串列表的每个值调用函数并更改它

ForEach 不是使用 Select 进行 foreach 尝试,而是遍历所有列表,但它是一个空列表,它不会返回任何结果。但是使用 select,您可以执行投影以返回已处理的值。

s.Tags = s.Tags.Select(t => TagCleaner.foo(t)).ToList();

您不应该使用 Linq 来更改您的集合,它不是为了这样做而设计的。因此,您的两个选项要么按照 Marc 的答案替换集合,要么使用经典循环。