gpt4 book ai didi

C# Linq/Lambda 表达式 : How to select an integer out of a string?

转载 作者:太空狗 更新时间:2023-10-30 00:04:08 24 4
gpt4 key购买 nike

我认为解释我的问题的最好方法是使用一个简短的(通用的)linq-to-objects 代码示例:

IEnumerable<string> ReadLines(string filename)
{
string line;
using (var rdr = new StreamReader(filename))
while ( (line = rdr.ReadLine()) != null)
yield return line;
}

IEnumerable<int> XValuesFromFile(string filename)
{
return ReadLines(filename)
.Select(l => l.Substring(3,3))
.Where(l => int.TryParse(l))
.Select(i => int.Parse(i));
}

请注意,此代码对整数进行了两次解析。我知道我缺少一种明显的简单方法来安全地消除其中一个调用(即因为我以前做过)。我现在找不到它。我该怎么做?

最佳答案

怎么样:

int? TryParse(string s)
{
int i;
return int.TryParse(s, out i) ? (int?)i : (int?)null;
}
IEnumerable<int> XValuesFromFile(string filename)
{
return from line in ReadLines(filename)
let start = line.Substring(3,3)
let parsed = TryParse(start)
where parsed != null
select parsed.GetValueOrDefault();
}

如果您愿意,您可以将第二行/第三行组合起来:

    return from line in ReadLines(filename)
let parsed = TryParse(line.Substring(3,3))

GetValueOrDefault 的选择是因为它跳过了转换 (int).Value 执行的验证检查 - 即它是(永远-so-slightly) 更快(我们已经检查过它不是 null)。

关于C# Linq/Lambda 表达式 : How to select an integer out of a string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187037/

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