如何在C#和.NET 2.0中将String[]转换为int[]?

25

我有:

string[] strArray = new string[3] { "1", "2", "12" };

我想要像这样的东西

int[] intArray = Convert.toIntArray(strArray);

我在C# .net v2.0中工作,不想写很多代码。

我该怎么做?

谢谢。


.NET 3.0+ 版本针对 Google 用户的代码:int[] intArr = strArr.Select(int.Parse).ToArray() - Callum Rogers
(embarassing comment removed) - user1228
@Callum:请参见https://dev59.com/3HM_5IYBdhLWcg3wn0rT ;)。顺便说一句,你的代码不是完成任务的最佳选择。 - abatishchev
6个回答

47
你可以使用 Array.ConvertAll 方法来实现此目的,该方法“将一个类型的数组转换为另一个类型的数组”。
int[] intArray = Array.ConvertAll(strArray,
                                  delegate(string s) { return int.Parse(s); });

(编辑:使用这种技术可以很好地进行类型推断。或者,您也可以像Marc Gravell的答案中那样使用隐式方法组转换,但必须显式指定泛型类型参数。)

使用 for 循环:

int[] intArray = new int[strArray.Length];

for (int i = 0; i < strArray.Length; i++)
   intArray[i] = int.Parse(strArray[i]);

为了完整起见,在C# 4.0中惯用的做法大致如下:

var intArray = strArray.Select(int.Parse).ToArray();

或者:

//EDIT: Probably faster since a fixed-size buffer is used
var intArray = Array.ConvertAll(strArray, int.Parse);

19
int[] intArray = Array.ConvertAll(strArray, int.Parse);

或者在 C# 2.0 中(其中泛型类型推断较弱):

int[] intArray = Array.ConvertAll<string,int>(strArray, int.Parse);

2
using System.Collections.Generic;

int Convert(string s)
{
    return Int32.Parse(s);
}

int[] result = Array.ConvertAll(input, new Converter<string, int>(Convert));

或者

int[] result = Array.ConvertAll(input, delegate(string s) { return Int32.Parse(s); })

1

当您确信所有项目都可以解析时,这将解决问题:

string[] strArray = new string[3] { "1", "2", "12" };
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
    intArray[i] = int.Parse(strArray[i]);
}

1

0

像这样,但你想要保留一些错误检查(我的if语句真的很糟糕,只是举个例子):

static private int[] toIntArray(string[] strArray)
{
    int[] intArray = new int[strArray.Length];
    for (int index = 0; index < strArray.Length; index++)
    {
            intArray[index] = Int32.Parse(strArray[index]);
    }
    return intArray;
}

使用方法如下:

string[] strArray = new string[3] { "1", "2", "12" };
int[] interi = toIntArray(strArray);

3
Int32.Parse 无法返回 null - 它会返回一个 int。 - Jon Skeet
Int32.Parse() 返回一个结构体(值类型)Int32,因此 != null 总是通过。这行代码会生成一个关于我在谈论什么的警告。 - abatishchev

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