Я предпочитаю вариант 2.
Одна вещь, которую вам нужно сделать, это проверить наличие исключений, хотя для подтверждения того, что это сработало, так же, как вы проверяете 'parsed' в варианте 1:
try
{
bar = Convert.ToInt32(foo);
}
catch(OverflowException)
{
// no can do!
{
Если бы вы конвертировали строку и т. Д. Вместо double, вы могли бы вместо этого получить «FormatException».
Редактировать
Я изначально говорил, что вариант 2 не особолучше, чем вариант 1, который @ 0xA3 указал неправильно.Вариант 1 хуже, потому что он преобразуется в строку перед анализом в целое число, что означает, что он менее эффективен.Вы также не получите OverflowException, если double находится вне целочисленного диапазона (что вы можете или не можете хотеть) - хотя 'parsed' будет False в этом случае.