如何将此字符串转换为整数数组?

7 c#

我有 string s = "158,141,90,86";

我如何将它们转换为int []?

Dar*_*rov 28

int[] result = "158,141,90,86".Split(',').Select(int.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 17

像这样,使用LINQ:

int[] array = s.Split(',')
               .Select(x => int.Parse(x))
               .ToArray();
Run Code Online (Sandbox Code Playgroud)

请注意,如果文本的任何元素不是整数,那将抛出异常.如果你想让它更有弹性(例如,如果这是用户输入的数据),你需要使用int.TryParse; 在那一点上,就LINQ查询而言,生活变得有点复杂.

编辑:要使其解析为int?[](对应于每个无效子字符串的空值),您可以执行以下操作:

int?[] array = s.Split(',')
                .Select(x => { 
                      int value;
                      return int.TryParse(x, out value) ? value : (int?)null;
                 })
                .ToArray();
Run Code Online (Sandbox Code Playgroud)

正如我所说,它不是非常好:(

编辑:在评论中,丹评论了对上述方法的"痴迷",而不是(可能)更为迫切的方法.在我看来,即使是不太令人愉快的第二版仍然比必要的替代版本更容易阅读.丑陋只是由于丑陋的性质int.TryParse,在命令式代码中使用时也同样难看.

如果int.TryParse要么返回,int?要么Tuple<bool, int>就像第一个版本一样容易.即使从元组形式转换为可空形式也很简单,只需要一个额外的投影:

int[] array = s.Split(',')
               .Select(x => int.TryParseTuple(x))
               .Select(tuple => tuple.First ? tuple.Second : (int?) null)
               .ToArray();
Run Code Online (Sandbox Code Playgroud)