Rah*_*ngh 3 c# linq arrays lambda
假设我有一个字符串数组,它可能包含一些可以解析为integer.
string[] strnums = { "2", "3", "hello", "5", "6", "8" };
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 LINQ 方法将此字符串数组转换为整数数组Select,如下所示:-
int[] numbers = strnums.Select(x =>
{
int temp = 0;
return int.TryParse(x, out temp) ? temp : 0;
}).ToArray();
Run Code Online (Sandbox Code Playgroud)
Output:2,3, 0 ,5,6,8 //这里不要0
在这里,在 else 块中,int.TryParse我必须给出默认值(0),但我不需要这个,这就是为什么我将我的问题标题为“绕过”else 部分。
然后我使用了这个查询,这工作正常,意味着如果未解析字符串,它不会插入不必要的零:-
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();
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是很多代码,只是为了不考虑默认值,我进行投影、过滤并再次投影。这是正确的方法吗?
小智 5
为什么不以良好的老式方式实现 - 至少它很容易理解
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);
});
Run Code Online (Sandbox Code Playgroud)
你可以省点万金油!!!
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |