Необходимо также рассмотреть array
модуль в стандартной библиотеке, если все объекты в списке или кортеже имеют тот же тип C. Это возьмет меньше памяти и может быть быстрее.
bool DoesItThrowException(Action a)
{
try
{
a();
return false;
}
catch
{
return true;
}
}
DoesItThrowException(delegate { desomething(); });
//or
DoesItThrowException(() => desomething());
Вы не можете вызвать его, пока не укажете аргументы; и вы не можете привести аргументы, если не знаете подписи. Чтобы обойти это, я бы возложил эту нагрузку на вызывающего абонента - я бы использовал Action
и anon-methods / lambdas, то есть
DoesItThrowException(FirstMethod); // no args, "as is"
DoesItThrowException(() => SecondMethod(arg));
DoesItThrowException(() => ThirdMethod(arg1, arg2, arg3, arg4, arg5));
В противном случае вы можете использовать Delegate
и ] DynamicInvoke
, но это медленно, и вам нужно знать, какие аргументы его передать.
public static bool DoesItThrowException(Action action) {
if (action == null) throw new ArgumentNullException("action");
try {
action();
return false;
} catch {
return true;
}
}