Использование модификатора параметров out - C#
Формулировка задачи:
Доброго времени суток!
Этот метод проверяет строку на соответствие наличию/отсутствию (в зависимости от параметра allow) в строке input символов, указанных в массивах chars и othch. При наличии запрещёных символов в массив erind пишутся их индексы; при отсутствии - одно значние (-1).
C# 2010 Express выдаёт ошибку со следующим текстом:
"До передачи управления из текущего метода параметру, помеченному ключевым словом out, "erind" должно быть присвоено значениe", хотя завершить метод с пустым (или имеющим элементы со значением null) массивом erind по идее нельзя.
Вот этот метод:
Буду благодарен, если объясните в чём дело.
public bool chk_text(string input, int len, bool allow, char[] chars, char[] othch, out int[] erind)
{
Array.Resize(ref chars, chars.Length + othch.Length);
for (int i = 0; i < othch.Length; i++)
{
chars[chars.Length + i] = othch[i];
}
//erind.DefaultIfEmpty(-1);
Array.Resize(ref erind, 0);
char tested;
if (input.Length > len)
{
MessageBox.Show("Error: text is too long.");
Array.Resize(ref erind, input.Length - len);
for (int i = len; i < input.Length; i++)
{
erind[i - len] = i;
}
return false;
}
if (input.Length > 0)
{
for (int i = 0; i <= input.Length - 1; i++)
{
tested = input.ElementAt(i);
if (chars.Contains(tested) != allow)
{
if (erind.Length == 0) MessageBox.Show("Error: text contains forbidden symbols.");
Array.Resize(ref erind, erind.Length + 1);
erind[erind.Length - 1] = i;
return false;
}
}
}
Array.Resize(ref erind, 1);
erind[0] = -1;
return true;
}Решение задачи: «Использование модификатора параметров out»
textual
Листинг программы
MessageBox.Show("Error: text is too long.");
Array.Resize(ref erind, input.Length - len);
return false;