我想制作一个简单的 CSV 解析器。它应该遍历逗号分隔值列表并将它们放在 IList<int>
中。 .这些值应该是整数。如果一个值不可解析,我只想忽略它。
这是我目前的代码:
csv.Split(',').Select(item =>
{
int parsed;
if (int.TryParse(item, out parsed))
{
return parsed;
}
continue; //is not allowed here
}).ToList();
但是,使用continue
这里(当然)是不允许的。 如何在我的选择实现中省略一个值?
注意:我当然可以使用 foreach 或 LINQ 表达式,但我想知道如何使用 lambda 来实现。
最佳答案
怎么样:
public static IEnumerable<int> ExtractInt32(this IEnumerable<string> values) {
foreach(var s in values) {
int i;
if(int.TryParse(s, out i)) yield return i;
}
}
然后:
var vals = csv.Split(',').ExtractInt32().ToList();
这里的好东西:
- 避免神奇的“哨兵”数字(如
int.MinValue
) - 避免单独和断开的“它是有效的”/“解析”步骤(因此没有重复)
关于c# - 如何在选择的 lambda 中省略一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088589/