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.
答案 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();