C# 使用=>;操作员从Serilog连接到记录器
我知道C# 使用=>;操作员从Serilog连接到记录器,c#,C#,我知道=>运算符可以用于lambda表达式和表达式体定义(请参阅)。但是我最近遇到了这行代码,我不确定为什么要使用=>操作符 private static Serilog.ILogger Log=>Serilog.Log.ForContext(); 如果我将=>操作符改为=操作符,它会以同样的方式工作吗?如下图所示: private static Serilog.ILogger Log=>Serilog.Log.ForContext(); 它们不是lambda的,但外观和气味都很像。是的 它减
=>
运算符可以用于lambda表达式和表达式体定义(请参阅)。但是我最近遇到了这行代码,我不确定为什么要使用=>
操作符
private static Serilog.ILogger Log=>Serilog.Log.ForContext();
如果我将=>操作符改为=操作符,它会以同样的方式工作吗?如下图所示:
private static Serilog.ILogger Log=>Serilog.Log.ForContext();
它们不是lambda的,但外观和气味都很像。是的
它减少了代码量,使表单更具可读性。在你的例子中:
private static Serilog.ILogger Log => Serilog.Log.ForContext<DriverConfig>();
private static Serilog.ILogger Log=>Serilog.Log.ForContext();
等于
private static Serilog.ILogger Log
{
get
{
return Serilog.Log.ForContext<DriverConfig>();
}
}
private static Serilog.ILogger日志
{
得到
{
返回Serilog.Log.ForContext();
}
}
如果从=>
中删除
,则所有问题都归结为执行该行的时间。第一个=
在实例化静态时运行,然后完成,并且不会重新计算。后者作为get工作,并且将在每次调用get时执行
它看起来相同,行为可能相同,但执行不同。使用
=>
您有一个表达式体属性,使用=
它只是一个字段。属性仅计算一次,字段-每次。顺便说一句,你的两个例子都是same@PavelAnikhouski我想你可以向后看,使用=>
的属性在每次调用时都会求值,但是使用=
的字段只会求值一次。只计算一次的属性将是{get;}=…
另一个区别是=>
是只读属性,因此您无法更改它,但=
是字段,您可以更改它的值。在等效属性中缺少get
。