这是C#中将分隔字符串转换为int数组的最佳方法吗?

这是C#中将分隔字符串转换为int数组的最佳方法吗?,c#,string,C#,String,给定以下字符串: string str = "1,2,3"; 这是将其转换为int数组的最佳扩展吗 static class StringExtensions { public static int[] ToIntArray(this string s) { return ToIntArray(s, ','); } public static int[] ToIntArray(this string s, char separator)

给定以下字符串:

string str = "1,2,3";
这是将其转换为
int
数组的最佳扩展吗

static class StringExtensions
{
    public static int[] ToIntArray(this string s)
    {
        return ToIntArray(s, ',');
    }
    public static int[] ToIntArray(this string s, char separator)
    {
        string[] ar = s.Split(separator);
        List<int> ints = new List<int>();
        foreach (var item in ar)
        {
            int v;
            if (int.TryParse(item, out v))
                ints.Add(v);
        }
        return ints.ToArray();
    }
}
静态类扩展
{
公共静态int[]ToIntArray(此字符串为s)
{
返回阵列(s),",",;
}
公共静态int[]ToIntArray(此字符串为s,字符分隔符)
{
字符串[]ar=s.Split(分隔符);
List ints=新列表();
foreach(应收账款中的var项目)
{
INTV;
if(内部锥虫(第五项))
内加(v);
}
返回ints.ToArray();
}
}

此方法非常简洁,如果拆分字符串包含任何无法解析为int的值,则会抛出一个(信息量不大的)
FormatException

int[] ints = str.Split(',').Select(s => int.Parse(s)).ToArray();
如果只想静默删除任何非int值,可以尝试以下操作:

private static int? AsNullableInt(string s)
{
    int? asNullableInt = null;

    int asInt;

    if (int.TryParse(s, out asInt))
    {
        asNullableInt = asInt;
    }

    return asNullableInt;
}

// Example usage...
int[] ints = str.Split(',')
    .Select(s => AsNullableInt(s))
    .Where(s => s.HasValue)
    .Select(s => s.Value)
    .ToArray();

这实际上取决于您想要对非整数字符串执行什么操作。此刻你默默地放下它们。就我个人而言,我希望它会出错。这还允许您使用更简洁的:

public static int[] ToIntArray(this string value, char separator)
{
    return Array.ConvertAll(value.Split(separator), s=>int.Parse(s));
}

看起来还可以,如果其中一个项目无法转换,而不是静默失败,我也会抛出一个异常。

如果列表中的一个元素没有解析为int,这可能比静默失败要好:

public static int[] ToIntArray(this string value, char separator)
{
    return value.Split(separator).Select(i => int.Parse(i)).ToArray();
}