Mmmmm. Já osobně bych se s tímto "řešením" nespokojil.
Bloky jako Try, catch a finally se obecně používají na něco hodně silného.
Například pokud program používá nějaké svoje soubory, ale nějaký Janek mu je v průběhu jeho spuštění někam přesune a nebo je uzamkne pro zápis (například je otevře v notepadu).
Takže kontrolovat uživatelův vstup přes try a catch je přece jenom trochu velký kanón na vrabce.
Kromě toho vyjímky mají další nepříjemnou vlastnost, která není vidět ani na úrovni kódu, dochází k tzv.
přepínání kontextu, což vadí když vyžaduješ výkon.
Namísto toho bych toto jako laik asi udělal v podobném duchu:
string a = "23";
string b = "asdf";
int x;
int y;
Console.WriteLine(Int32.TryParse(a, out x) ? x.ToString() : "Not a number");
Console.WriteLine(Int32.TryParse(b, out y) ? y.ToString() : "Not a number");
Console.ReadLine();