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 属性
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 属性