June 21, 2006
И снова о том, как не надо делать
Продолжаю сталкиваться по работе с чужим кодом и каждый раз нахожу новые и новые перлы. На этот раз натолкнулся на код типа вот этого.
Hashtable hash = new Hashtable();
//...
// здесь заполняем hash
//...
int i = Convert.ToInt32( hash[ "some_key" ].ToString() );
Чтобы не выполнять десять операций, я сократил этот код до:
int i = (int)hash["some_key"];
Но не тут-то было...
Окаалось что заполнение хэша может произойти в двух разных местах. В упрощённом варианте это выглядело так:
// the first place
hash["some_key"] = 1;
// the second place
hash["some_key"] = "1";
А я то думал, зачем столько операций чтобы всего-то получить int из словаря и unbox его в настоящий int.
ЗЫ: А на MSDN Blogs в это время обсуждают спорный вопрос о том, стоит или не стоит делать catch(Exception).
Hashtable hash = new Hashtable();
//...
// здесь заполняем hash
//...
int i = Convert.ToInt32( hash[ "some_key" ].ToString() );
Чтобы не выполнять десять операций, я сократил этот код до:
int i = (int)hash["some_key"];
Но не тут-то было...
Окаалось что заполнение хэша может произойти в двух разных местах. В упрощённом варианте это выглядело так:
// the first place
hash["some_key"] = 1;
// the second place
hash["some_key"] = "1";
А я то думал, зачем столько операций чтобы всего-то получить int из словаря и unbox его в настоящий int.
ЗЫ: А на MSDN Blogs в это время обсуждают спорный вопрос о том, стоит или не стоит делать catch(Exception).