Очистка с IDisposable проблемами
Я пытаюсь вызвать эти функции, чтобы избавиться от ненужных вещей, но мой код, похоже, побеждает меня в том, что я начинаю воспринимать как тщетную борьбу. Я пробовал несколько способов решить эти последние две ошибки, но IEnumerator дает мне джокеры. ошибки в строках: if (enumerator2 является IDisposable) и if (перечислитель является IDisposable)
try
{
enumerator = matchs.GetEnumerator();
while (enumerator.MoveNext())
{
IEnumerator enumerator2;
Match current = (Match) enumerator.Current;
num = 0;
try
{
enumerator2 = current.Groups.GetEnumerator();
while (enumerator2.MoveNext())
{
Group group = (Group) enumerator2.Current;
strArray[num, num3] = group.Value;
num++;
}
}
finally
{
if (enumerator2 is IDisposable)
{
(enumerator2 as IDisposable).Dispose();
}
}
if (num2 < num3)
{
num2 = num3;
}
num3++;
}
}
finally
{
if (enumerator is IDisposable)
{
(enumerator as IDisposable).Dispose();
}
}
strArray[num, 0] = Conversions.ToString((int) (num2 + 1));
return strArray;
}
Редактировать специфические сообщения об ошибках: Использование неназначенной локальной переменной 'enumerator2'
Использование неназначенной локальной переменной 'enumerator'
2 ответа
Вы должны использовать foreach
петля, как указано другими.
Но причина, по которой вы получаете эту ошибку, заключается в том, что когда enumerator2
используется в finally
блок, компилятор не может знать, что ему присвоено какое-то значение (потому что это может не быть в некоторых исключительных ситуациях). Вы можете исправить свой код как есть, выполнив:
IEnumerator enumerator2 = null;
Match current = ...
Используйте цикл for-each вместо цикла while. Он будет вызывать Dispose для вас, если это необходимо.
http://msdn.microsoft.com/en-us/library/aa288257(VS.71).aspx