这可能是一个基本问题,但我无法找到解决方法.我有一个字符串数组,我试图用整数解析它们.正如所料,我得到了格式异常.
我怎么能跳过"3a"并继续解析剩余的数组并使用Linq将整数存储到输出中?这是一种更好的方法还是不做练习?在这种情况下,请介绍一下如何使用TryParse
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] values = { "1", "2", "3a","4" };
List<int> output = new List<int>();
try{
output = values.Select(i => int.Parse(i)).ToList<int>();
}
catch(FormatException)
{
foreach (int i in output)
Console.WriteLine(i);
}
foreach (int i in output)
Console.WriteLine(i);
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 int.TryParse
string[] values = { "1", "2", "3a","4" };
int i = int.MinValue;
List<int> output = values.Where(s => int.TryParse(s, out i))
.Select(s => i)
.ToList();
Run Code Online (Sandbox Code Playgroud)
然而,Eric Lippert 不会被逗乐.因此,如果您不想(ab)使用副作用,这将是最佳实践方法:
创建一个扩展方法,如:
public static class NumericExtensions
{
public static int? TryGetInt(this string item)
{
int i;
bool success = int.TryParse(item, out i);
return success ? (int?)i : (int?)null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以这样写:
List<int> output = values.Select(s => s.TryGetInt())
.Where(nullableInt => nullableInt.HasValue)
.Select(nullableInt => nullableInt.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)