Lambda 在 Console.Writeline(s) 和 Log,Info(s) 之间切换

Lambda to toggle between Console.Writeline(s) and Log,Info(s)

C# 我正在使用以下 lambda:s=> Console.Writeline(s) 但我希望能够在 s => this.Log.Info(s)s => this.Log.Info(s) 之间切换 依赖于 Environment.UserInteractive 所以它允许根据调用它的位置在控制台和记录器之间切换。我以为我可以使用 lambda 语句,但我遇到了各种各样的错误。

我正在尝试 s => Environment.UserInteractive != true ? this.Log.Info(s) : Console.Writeline(s)

这用于将记录器传递给实例创建:这是 class:

public ABCStub(Action<string> logger);`

您可以使用三元运算符通过正确的操作创建 ABCStub

var abcStub =
    Environment.UserInteractive
    ? new ABCStub(Log.Info)
    : new ABCStub(Console.Writeline);

不能简单地使用三元运算符来代替 if..else 语句;它必须 return 一个值。

而不是

s => Environment.UserInteractive != true ? this.Log.Info(s) : Console.Writeline(s)

你应该试试

Environment.UserInteractive != true ? this.Log.Info : (Action<string>)Console.Writeline

这将解决 vois 方法上的三元表达式问题,并避免在每次调用时评估 UserInteractive 属性