gpt4 book ai didi

c# - 将条件 lambda 语句与列表上的 foreach 操作一起使用

转载 作者:太空狗 更新时间:2023-10-29 22:29:32 24 4
gpt4 key购买 nike

为什么我不能做这样的事情?

如果我有一个 List<String> myList填充了项目,我希望能够像这样以有条件的方式对每个成员采取行动:

myList.ForEach(a => { if (a.Trim().Length == 0) a = "0.0"; })

但这不会编译。我猜这与缺少返回值有关?

我正在尝试准备一个字符串列表以转换为 double 值,我希望空项显示“0.0”,这样我就可以一次性转换整个列表。

最佳答案

ForEach 不是可变的,它不会以任何方式改变数据结构。

您可以:

  1. 自己用索引处理循环
  2. 使用 .Select 和 .ToList 生成一个新列表(前提是您使用的是 .NET 3.5)

#1 的例子:

for (Int32 index = 0; index < myList.Count; index++)
if (myList[index].Trim().Length == 0)
myList[index] = "0.0";

使用 .NET 3.5 和 Linq:

myList = (from a in myList
select (a.Trim().Length == 0) ? "0.0" : a).ToList();

在 .NET 3.5 中,不使用 Linq 语法,而是使用 Linq 代码:

myList = myList.Select(a => (a.Trim().Length == 0) ? "0.0" : a).ToList();

编辑:如果您想生成一个新的 double 列表,您也可以使用 Linq 一次性完成:

List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0" : a) into d
select Double.Parse(d)).ToList();

请注意,使用“0.0”而不仅仅是“0”取决于小数点是句点字符。在我的系统上它不是,所以我只用“0”替换它,但更合适的方法是更改​​对 Double.Parse 的调用以采用显式数字格式,如下所示:

List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0.0" : a) into d
select Double.Parse(d, CultureInfo.InvariantCulture)).ToList();

关于c# - 将条件 lambda 语句与列表上的 foreach 操作一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676904/

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