2015-02-25 3 views
1

В следующем коде целые числа n1 и n2 могут быть доступны внутри блока try.Обработка исключений: Локальные переменные

Однако они не признаны catch и finally. Могу я узнать причину ?! Существует ERROR, если я попытаюсь напечатать n1 и n2 значения в catch и finally блок.

static void Main(string[] args) 
{ 
    int n1, n2; 
    try 
    { 
     n1 = Convert.ToInt32(Console.ReadLine()); 
     n2 = Convert.ToInt32(Console.ReadLine()); 
     int result; 
     result = n1/n2; 
     Console.WriteLine("Result " + result); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error, please provide non zero value for denominator"); 
     Console.WriteLine("n1 = {0} and n2 = {1}", n1, n2); -> why n1, n2 are unassigned local variables here. 
     Console.ReadLine(); 
    } 
    finally 
    { 
     Console.ReadLine(); 
     Console.WriteLine("n1 = {0} and n2 = {1}", n1, n2); -> why n1, n2 are unassigned local variables here. 
    } 
} 
+1

пробельных сильна с этим. –

+0

Инициализировать n1 и n2 до нуля. – Tarik

ответ

0

Однако они не признаются улове и, наконец, блок. Могу я узнать причину ?!

Уверенный - они не являются определенно присвоены. Представьте, Console.ReadLine выдает исключение. Вы поймаете это исключение, но вы не присвоили значение n1 или n2.

Возможно, вы захотите указать начальные значения для них, где вы их объявляете, таким образом, они всегда будут определенно назначены. Но на самом деле не совсем ясно, что вы хотите или почему вы пытаетесь использовать их в блоке finally в любом случае. Если вы действительно хотите получить к ним доступ после блока finally, вы можете просто вернуть или перестроить исключение в блоке catch - таким образом, единственный способ получить после блока finally будет через код, который присваивает значения n1 и n2, поэтому они будут определенно назначены, и вы сможете прочитать их.

0

Компилятор жалуется, что может быть Unassigned, потому что вы только присвоить переменным внутри try блока и, насколько он обеспокоен тем, что нет никакой гарантии, что пойманы исключение не будет выброшено перед тем уступки.

Try инициализирует их к нулю:

int n1 = 0; 
int n2 = 0; 
Смежные вопросы