给出以下字符串:
string str = "1,2,3";
Run Code Online (Sandbox Code Playgroud)
这是将它转换为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();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 40
这真的取决于你想用非整数字符串做什么.此刻你静静地放下它们.就个人而言,我希望它出错.这也让你使用更简洁:
public static int[] ToIntArray(this string value, char separator)
{
return Array.ConvertAll(value.Split(separator), s=>int.Parse(s));
}
Run Code Online (Sandbox Code Playgroud)
FormatException如果拆分字符串包含任何无法解析为int的值,则此方法非常简洁,并且会抛出(信息量不大):
int[] ints = str.Split(',').Select(s => int.Parse(s)).ToArray();
Run Code Online (Sandbox Code Playgroud)
如果您只想静默删除任何非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();
Run Code Online (Sandbox Code Playgroud)
如果列表中的某个元素没有解析为int,这会爆炸,这可能比默默地失败更好:
public static int[] ToIntArray(this string value, char separator)
{
return value.Split(separator).Select(i => int.Parse(i)).ToArray();
}
Run Code Online (Sandbox Code Playgroud)