我想在 C# 中做这样的事情。我认为使用委托或匿名方法可以实现这一点。我尝试过,但我做不到。需要帮忙。
SomeType someVariable = try {
return getVariableOfSomeType();
} catch { Throw new exception(); }
您可以创建通用辅助函数:
static T TryCatch<T, E>(Func<T> func, Func<E, T> exception)
where E : Exception {
try {
return func();
} catch (E ex) {
return exception(ex);
}
}
然后你可以像这样调用:
static int Main() {
int zero = 0;
return TryCatch<int, DivideByZeroException>(() => 1 / zero, ex => 0);
}
这会在
1 / zero
的 TryCatch
的上下文中评估 try
,导致评估异常处理程序,仅返回 0。
我怀疑这比直接在
try
中使用辅助变量和 catch
/Main
语句更具可读性,但如果您遇到这种情况,这就是您可以做到的。
除了
ex => 0
之外,你还可以让异常函数抛出其他东西。
你应该做这样的事情:
SomeType someVariable;
try {
someVariable = getVariableOfSomeType();
}
catch {
throw new Exception();
}
SomeType someVariable = null;
try
{
someVariable = GetVariableOfSomeType();
}
catch(Exception e)
{
// Do something with exception
throw;
}
你可以试试这个
try
{
SomeType someVariable = return getVariableOfSomeType();
}
catch { throw; }
SomeType someVariable = null;
try
{
//try something, if fails it move to catch exception
}
catch(Exception e)
{
// Do something with exception
throw;
}
而不是这个:
SomeType someVariable = try {
return getVariableOfSomeType();
} catch
将所有依赖变量的代码放入try块中:
try {
SomeType someVariable = getVariableOfSomeType();
perform_calculation(some_variable); // <---- all code here
} catch
我要表达的观点是:考虑重构你的代码。