为什么我不能做这样的事情?
如果我有一个List<String> myList填充项目,我希望能够以条件方式对每个成员采取行动,如下所示:
myList.ForEach(a => { if (a.Trim().Length == 0) a = "0.0"; })
Run Code Online (Sandbox Code Playgroud)
但这不会编译.我猜它与缺少一个返回值有什么关系?
我试图准备一个字符串列表转换为双打,我希望空项目显示'0.0'所以我可以一次性转换整个列表.
ForEach不可变,它不会以任何方式改变数据结构.
你可以:
#1的示例:
for (Int32 index = 0; index < myList.Count; index++)
if (myList[index].Trim().Length == 0)
myList[index] = "0.0";
Run Code Online (Sandbox Code Playgroud)
使用.NET 3.5和Linq:
myList = (from a in myList
select (a.Trim().Length == 0) ? "0.0" : a).ToList();
Run Code Online (Sandbox Code Playgroud)
使用.NET 3.5,不使用Linq语法,而是使用Linq代码:
myList = myList.Select(a => (a.Trim().Length == 0) ? "0.0" : a).ToList();
Run Code Online (Sandbox Code Playgroud)
编辑:如果您想要生成一个新的双打列表,您也可以使用Linq一次性完成:
List<Double> myDoubleList =
(from a in myList
select (a.Trim().Length == 0 ? "0" : a) into d
select Double.Parse(d)).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,使用"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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12459 次 |
| 最近记录: |