Если предположить, что операторы Catch не являются вложенными, этот код работает в VB.Net:
.
Try
SomeCode()
Catch ex As ArgumentException When ex.Message <> ""
Trace.WriteLine(String.Format("Caught argument exception with a message {0}", ex.Message))
Catch ex As Exception
Trace.WriteLine("Caught argument exception with no message, or some other type of exception")
End Try
если SomeCode выбрасывает ArgumentExeption с сообщением (например, ArgumentException, созданный с помощью пустого конструктора), оно будет обработано первым оператором Catch. Все остальные исключения будут обрабатываться вторым оператором Catch, включая ArgumentException с пустым сообщением.
Я предполагаю, что если VB.NET может это сделать, то C # может (но предположение может быть ужасно неверным).
РЕДАКТИРОВАТЬ: Кажется, что нет эквивалентной структуры кода в C #, как спрашивается здесь . Извините, если я вводил в заблуждение.