在C#中,将分隔字符串转换为整数数组的最佳方法是什么?

19

给定以下字符串:

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();
    }
}
4个回答

41

这取决于您想如何处理非整数字符串。目前,您会默默地忽略它们。个人而言,我希望它能报错。这还可以让您使用更简洁的方式:

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

9

这种方法非常简洁,如果要分割的字符串包含任何无法解析为整数的值,则会抛出一个(不是很详细的)FormatException异常:

int[] ints = str.Split(',').Select(s => int.Parse(s)).ToArray();

如果您只想悄悄地删除任何非整数值,可以尝试这个方法:
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();

5

如果列表中的某个元素无法作为整数解析,则会发生错误,这可能比静默失败更好:

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接