Caf*_*eek 7 refactoring delegates action func c#-4.0
我有以下两个功能,几乎相同,唯一的区别是一个使用func,另一个action.如果可能的话,我想将它们组合成一个函数.
private static void TryCatch(Action action)
{
try
{
action();
}
catch (Exception x)
{
Emailer.LogError(x);
throw;
}
}
private static TResult TryCatch<TResult>(Func<TResult> func)
{
try
{
return func();
}
catch (Exception x)
{
Emailer.LogError(x);
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
在 C# 中将这两个函数合并为一个函数确实是不可能的。C void# 和 CLR 中的 根本就不是类型,因此具有与非 void 函数不同的返回语义。正确实现这种模式的唯一方法是为 void 和非 void 委托提供重载
CLR 限制并不意味着在每种 CLR 语言中都无法做到这一点。void在用于表示不返回值的函数的语言中这是不可能的。这种模式在 F# 中非常可行,因为它使用Unit而不是voidfor 无法返回值的方法。