Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用=>;操作员从Serilog连接到记录器_C# - Fatal编程技术网

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