c# - 如何在选择的 lambda 中省略一个值?

标签 c# linq select lambda

我想制作一个简单的 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/

相关文章:

c# - 类型转换盒装字节

c# - 以编程方式创建 SQL 作业

linq - 使用LINQ查询和更新集合中的属性

mysql - 选择包含一列中的值的多行

c# - ASP.NET MVC4 : how to detect screen width on the filter Action?

c# - 按任意时间间隔对 DateTime 进行分组

linq - Linq 的历史 - 任何资源?

php - 从其中包含该名称的列中删除

php - 如何使用 PHP 和 Codeigniter 处理 foreach 中 mysql 中的 SELECT(MAX())

c# - 为什么可以等待 Rx observable?