Из этого списка есть только 4 исключения, которые я бы рассмотрел:
NotSupportedException
ArgumentNullException
ArgumentOutOfRangeException
ArgumentException
Два других вы никогда не должны поймать, и с более поздними версиями CLR вы не можете поймать ситуацию с OOM (рассмотрите MemoryFailPoint , если вам нужно узнать).
Погружаясь глубже в Array.CreateInstance
, мы видим, почему каждый из этих четырех будет брошен:
NotImplementedException
: тип, который вы указали, не может быть массивом или открытым универсальным. Поскольку вы извлекаете эти типы данных из фиксированного списка, вы должны знать a priori , что это допустимые типы. Я бы не согласился с обработкой этого исключения.
ArgumentNullException
: вы должны быть уверены, что все передаваемые вами аргументы не равны нулю, поэтому этого никогда не произойдет, и вам не следует обрабатывать это исключение.
ArgumentOutOfRangeException
: одна из длин меньше 0, которую вы можете проверить a priori , поэтому вам не следует обрабатывать это исключение.
ArgumentException
: Выдается, если тип недействителен (вы уже убедились, что он действителен) или если длины недостаточно, что вы можете проверить a priori .
Итак, мой предложенный код будет:
// code prior to this point ensures cbDataType only has correct types
// and dimensions has at least 1 dimension and is all greater than or equal to 1
data = Array.CreateInstance(
TypeHelper.StringToType(cbDataType.SelectedItem.ToString()),
dimensions);
Таким образом, я бы не стал обрабатывать какие-либо исключения, поскольку вы должны быть в состоянии предотвратить их возникновение, и вам не следует беспокоиться о случаях, когда вы не можете обработать исключение.