我有:
string[] strArray = new string[3] { "1", "2", "12" };
我想要像这样的东西
int[] intArray = Convert.toIntArray(strArray);
我在C# .net v2.0中工作,不想写很多代码。
我该怎么做?
谢谢。
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);
int[] intArray = Array.ConvertAll(strArray, int.Parse);
或者在 C# 2.0 中(其中泛型类型推断较弱):
int[] intArray = Array.ConvertAll<string,int>(strArray, int.Parse);
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); })
当您确信所有项目都可以解析时,这将解决问题:
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]);
}
像这样,但你想要保留一些错误检查(我的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);
Int32.Parse()
返回一个结构体(值类型)Int32
,因此 != null
总是通过。这行代码会生成一个关于我在谈论什么的警告。 - abatishchev
int[] intArr = strArr.Select(int.Parse).ToArray()
。 - Callum Rogers