Вход на сайт
.NET und C# ohne Web?
4812 просмотров
Перейти к просмотру всей ветки
Программист коренной житель
в ответ Murr 20.05.21 09:10, Последний раз изменено 20.05.21 09:44 (Программист)
Какая разница что и как там внутри? Нет выброса исключений из функции и точка.
Разница в том, что считать ошибкой. В случае ошибки функция должна выбрасывать исключение. Если в случае ошибки функция возвращает null, то нельзя сказать, является ли null нештатной ситуацией.
if(!parsedValue.HasData) { /*obrabotka oshibki */}
Зачем городить кучу хрени со сложностями?
Все это мило, но код превратится во что-то слабо читаемое, если тебе надо будет распарсить десяток строк:
Сравни твой вариант:
int? parsedValue = int.Parse (strVal1); if(!parsedValue.HasData) return null; someObject.Val1 = parsedValue.Value; parsedValue = int.Parse (strVal2); if(!parsedValue.HasData) return null; someObject.Val2 = parsedValue.Value; parsedValue = int.Parse (strVal3); if(!parsedValue.HasData) return null; someObject.Val3 = parsedValue.Value; parsedValue = int.Parse (strVal4); if(!parsedValue.HasData) return null; someObject.Val4 = parsedValue.Value; parsedValue = int.Parse (strVal5); if(!parsedValue.HasData) return null; someObject.Val5 = parsedValue.Value; return someObject;
и вариант с исключением:
try { someObject.Val1 = int.Parse(strVal1); someObject.Val2 = int.Parse(strVal2); someObject.Val3 = int.Parse(strVal3); someObject.Val4 = int.Parse(strVal4); someObject.Val5 = int.Parse(strVal5); return someObject; } catch (Exception ex) { logger.Error ("Can't parse value", ex); return null; }
честно говоря, за твой вариант с nullable int'ом отрывать руки. ИМХО :)