Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
throwФобия
foreach(string element in elements)
{
try
{
int someData = int.Parse(element);
result.Add(someData);
}
catch
{
}
}
foreach (var element in elements)
{
int someData;
if (int.TryParse(element, out someData))
result.Add(someData);
}
var result = DataFilter.Filter<string, int>(sourceData, int.TryParse);
public delegate bool TryParse<in TInput, TOutput>(TInput input, out TOutput output);
public static class DataFilter
{
public static IEnumerable<TResult> Filter<TSource, TResult>(IEnumerable<TSource> sourceSequence,
TryParse<TSource, TResult> tryParseFunction)
{
List<TResult> result = new List<TResult>();
foreach (var sourceElement in sourceSequence)
{
TResult resultElement;
if (tryParseFunction(sourceElement, out resultElement))
{
result.Add(resultElement);
}
}
return result;
}
}
var result = elements.Select(e => e.ToInt()).Where(e => e != null);
public static class StringExtensions
{
public static int? ToInt(this string s)
{
int i;
return int.TryParse(s, out i) ? i : (int?) null;
}
}
Но если он есть и подходит для логики «cancel» — глупо его не использовать.
— Дорогой, тебе нравится туалетная вода, которую я тебе купила?
— Нет.
— Ок, я сейчас что-нибудь придумаю.
— Дорогой, я купила тебе туалетную воду, пользуйся.
— Ок.
— Дорогой, я купила тебе туалетную воду, пользуйся.
— *хватаясь за ремень* Ах ты ж стерва, я терпеть не могу такой аромат!
— Дорогой, какую туалетную воду ты любишь?
— %result%.
— Дорогой, я купила тебе туалетную воду %result%, пользуйся.
— Дорогой, какую туалетную воду ты любишь?
— %result%.
… Прошло время…
— Дорогой, я купила тебе туалетную воду %result%, пользуйся.
— Да меня тошнит уже от неё
— О_о
using(new FileInfo("1.txt").OpenText())
throw new MyException();var textStream = new FileInfo("1.txt").OpenText();
try
{
throw new MyException();
}
finally
{
if (textStream != null)
{
((IDisposable)textStream).Dispose();
}
}Что делает его бесполезным. А в общем случае эксепшн может вылетить и до начала using.StreamReader textStream = null;
try
{
textStream = new FileInfo("1.txt").OpenText()
throw new MyException();
}
finally
{
if (textStream != null)
((IDisposable)textStream).Dispose();
}Клиенту больше не надо анализировать сложный результат, он попросил найти текст — ему нашли; если нет — он об этом даже не узнает.
Как вы относитесь к маленьким функциям? Я вот считаю, что другие просто не имеют права на существование. При таком отношении периодически возникают ситуации, что без поднятия исключений просто не куда. Например, надо выйти из цикла расположенного выше по стеку вызовов. Не передавать же флаг завершения, в конце концов. Или передать…
static class SrcClassHelper
{
public static void Exec(this SrcClass src)
{
if (!src.TryExec()) // Здесь было без !
throw new MyException();
}
}
Exception-ы и мифы о них