Инициализация целочисленного массива - PullRequest
1 голос
/ 29 августа 2011
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 ]

3 голосов
/ 29 августа 2011

Самая большая проблема с вашим решением - не объявление отсутствующего массива, а скорее как Вы бы проанализировали следующий код:

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.

3 голосов
/ 29 августа 2011

Вы ищете что-то вроде

int[] dosageIntArray = new int[dosageStringArray.Length];
1 голос
/ 29 августа 2011

Вы должны распределить dosageIntArray следующим образом:

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

Также в вашем коде есть еще одна ошибка: Индекс последнего элемента массива: Длина - 1. Ваше заявление должно читаться как:

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

или

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

Первый вариант предпочтителен и является наиболее распространенным стилем, который вы увидите.

1 голос
/ 29 августа 2011

Вы пытаетесь получить доступ к пустому массиву (dosageIntArray) здесь:

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

Вам нужно инициализировать его, прежде чем вы сможете получить к нему доступ таким образом.

0 голосов
/ 29 августа 2011

Как альтернативный подход:

var dosage = "2/3/5 mg";
int[] dosageIntArray = Regex.Matches(dosage, @"\d+")
                            .Select(m => int.Parse(m.Value))
                            .ToArray();
0 голосов
/ 29 августа 2011

Я настоятельно рекомендую вам использовать списки вместо массивов. Вам не нужно определять размер списка; просто добавьте предметы к нему. Это очень функционально и намного проще в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...