我有这个Logger类:
public static class Logger
{
public static void LogError(Exception e)
{
}
public static void TryCatchLogError<T>(this T item, Action action)
{
try
{
action();
}
catch (Exception ex)
{
LogError(ex);
}
}
}
我可以这样做:
public partial class Form1 : Form
{
public void GetBreakDownMachine()=> this.TryCatchLogError(() =>
{
{
//my code
}
});
}
但在我的静态主类
中不能做同样的事情static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()=> this.TryCatchLogError(() =>
{
{
//my code
}
});
}
如何使用上述静态方法的Logger扩展类?
答案 0 :(得分:0)
您可以将类的主方法设为Expression Bodied Member,就像这样(至少对于控制台应用程序)
private static void Main(string[] args) => Console.WriteLine("asdasd");
然而,这是相当丑陋的,我永远不会亲自去做。整个 Expression try catch 也不适合我。它只是额外调用堆栈来玷污你的堆栈跟踪,最糟糕的是你没有处理异常而只是使用毯子捕获。
我会重新考虑这两种方法
如果你真的想要走下这个兔子洞,你需要传递T物品
public static void TryCatchLogError<T>(this T item, Action action)
{
try
{
action();
}
catch (Exception ex)
{
// LogError(ex);
}
}
private static void Main() =>
TryCatchLogError("asd", // <== here needs to be T Item
() =>
{
Console.WriteLine("asdasd");
});
答案 1 :(得分:0)
您的方法需要“项目”,但Main不提供。 Main中没有'this'。