尝试将 catch 扩展用于主要方法?



我有这个记录器类:

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
}
});
}

如何为上述静态方法使用记录器扩展类?

您的方法需要一个"项目",但 Main 不提供它。主中没有"这个"。

你可以将类的主方法设置为表达式主体成员,就像这样(至少对控制台应用(

private static void Main(string[] args) => Console.WriteLine("asdasd");

然而,这是相当丑陋的,我永远不会亲自做。此外,整个表达式尝试捕捉的事情也不适合我。它只是对堆栈的额外调用来玷污您的堆栈跟踪,最糟糕的是,您没有处理异常,只是使用一揽子包罗万象。

我会重新考虑这两种方法

如果你真的想掉进这个兔子洞,你需要通过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");
});

最新更新