初始化整数数组

时间:2011-08-29 10:58:58

标签: c# asp.net arrays exception

string dosage = "2/3/5 mg";
string[] dosageStringArray = dosage.Split('/');
int[] dosageIntArray = null;
for (int i = 0; i <= dosageStringArray.Length; i++) 
{
    if (i == dosageStringArray.Length)
    {
        string[] lastDigit = dosageStringArray[i].Split(' ');
        dosageIntArray[i] = Common.Utility.ConvertToInt(lastDigit[0]);
    }
    else
    {
        dosageIntArray[i] = Common.Utility.ConvertToInt(dosageStringArray[i]);
    }
}

我在这一行获得了例外:dosageIntArray[i] = Common.Utility.ConvertToInt(dosageStringArray[i]); 我无法解决此问题。没有问题所在。但这一行int[] dosageIntArray = null;看起来很可疑。任何帮助将不胜感激。

例外:Object reference not set to an instance of an object.

6 个答案:

答案 0 :(得分:3)

您正在寻找类似

的内容
int[] dosageIntArray = new int[dosageStringArray.Length];

答案 1 :(得分:3)

您的解决方案的最大问题不是缺少数组声明,而是如何 你要解析以下代码:

string dosage = "2/13/5 mg";

由于您的问题肯定是针对特定领域的,因此可能不会出现这种问题,但是两位数的某些变体代表相同的整数。

以下解决方案在正斜杠上拆分字符串,然后在将子字符串转换为整数之前从子字符串中删除任何非数字。

Regex digitsOnly = new Regex(@"[^\d]");   
var array = dosage.Split('/')
                  .Select(num => int.Parse(digitsOnly.Replace(num, string.Empty)))
                  .ToArray();

或者可爱的Linq synthax看起来像什么。

答案 2 :(得分:1)

您正在尝试访问空数组(doseIntArray):

dosageIntArray[i] = Common.Utility.ConvertToInt(lastDigit[0]);

您需要先进行初始化,然后再进行访问。

答案 3 :(得分:1)

你必须像这样分配doseIntArray:

in[] dosageIntArray = new int[dosageStringArray.Length];

此外,您的代码中还有另一个错误: 数组的最后一个元素的索引是Length - 1。 您的for语句应为:

for (int i = 0; i < dosageStringArray.Length; i++)

for (int i = 0; i <= (dosageStringArray.Length - 1); i++)

前者是首选,是您将看到的最常见的风格。

答案 4 :(得分:0)

我强烈建议您使用列表而不是阵列。您不需要定义List的大小;只需添加项目。它非常实用,更易于使用。

答案 5 :(得分:0)

作为替代方法:

var dosage = "2/3/5 mg";
int[] dosageIntArray = Regex.Matches(dosage, @"\d+")
                            .Select(m => int.Parse(m.Value))
                            .ToArray();