gpt4 book ai didi

c# - 在 Lambda 语法中绕过 int.TryParse 的 else block

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

假设我有一个字符串数组,它可能包含一些可以解析为 integer 的数据。

string[] strnums = { "2", "3", "hello", "5", "6", "8" };

我正在尝试使用 LINQ Select 方法将此字符串数组转换为整数数组,如下所示:-

int[] numbers = strnums.Select(x =>
{
int temp = 0;
return int.TryParse(x, out temp) ? temp : 0;
}).ToArray();

输出: 2,3,0,5,6,8//这里不要0

在这里,在 int.TryParse 的 else block 中,我必须给出一个默认值 (0),但我不需要这个,这就是为什么我将我的问题命名为“By-Pass” "其他部分。

然后我使用了这个查询,它工作正常,意味着如果字符串没有被解析,它不会插入不必要的零:-

int[] numbers1 = strnums.Select(x => 
{
int temp = 0;
bool isParsed = int.TryParse(x, out temp);
return new { temp, isParsed };
})
.Where(x => x.isParsed)
.Select(x => x.temp)
.ToArray();

但是,这似乎是很多代码,只是为了不考虑默认值,我在投影,过滤和再次投影。这是正确的方法吗?

最佳答案

为什么不用老式的方式来实现——至少它很容易理解

        var nums = new List<int>();
var numStrings = new List<string>{ "1", "2", "hello" };
numStrings.ForEach(numString =>
{
int temp;
if (int.TryParse(numString, out temp))
nums.Add(temp);
});

你可以省点万金油!!!

关于c# - 在 Lambda 语法中绕过 int.TryParse 的 else block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719761/

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