C# 两者之间的差异=>;然后得到{}

C# 两者之间的差异=>;然后得到{},c#,pointers,properties,C#,Pointers,Properties,在性能或内存方面是否有差异 public string Id { get { return this.id; } } 或 我更喜欢=>this.Id的外观,但我想知道我是否做错了什么 还有,像这样的东西有什么问题吗 public void Test() => this.id = "fdsafdsa"; 不,没有区别* 它们编译成相同的代码。看到了 它只是用于属性(或其他成员)实现。或者按照它的定义: 表达式体定义允许您提供成员的实现 以非常简洁易读的形式。可以使用表达式体 定义

在性能或内存方面是否有差异

public string Id
{
    get { return this.id; }
}

我更喜欢=>this.Id的外观,但我想知道我是否做错了什么

还有,像这样的东西有什么问题吗

public void Test() => this.id = "fdsafdsa";
不,没有区别* 它们编译成相同的代码。看到了

它只是用于属性(或其他成员)实现。或者按照它的定义:

表达式体定义允许您提供成员的实现 以非常简洁易读的形式。可以使用表达式体 定义任何受支持成员的逻辑,例如 方法或属性,由单个表达式组成



*当可以使用任何一种形式时。

我认为它更像一种语法糖


在这个问题中解释得更好。

我在文档中知道:对于表达式bodied members=只有赋值、调用、递增、递减和新对象表达式可以用作语句。在另一种情况下,它们是相同的,表达式体最好用于清晰的代码。
publicstringid{get=>this.od;}
。所有这些都编译成相同的代码。抱歉,可能是重复的,但不是相同的东西,编译相同的IL,但表达式体有一些限制。@wikiCan当然有一些限制(在文档中解释)。然而,OP询问在性能方面是否存在差异(即,何时可以使用任何一种形式)。这些限制首先不允许您使用表达式体定义,因此它们不受此问题的约束。@AhmedAbdelhameed在调试生成中不是相同的IL代码:lambda expression bodied在示例中更优化。您建议的dup中的OlivierRogier:“所以,添加的指令没有任何作用。我相信它们中的大多数都是用来帮助调试的。”。因此,在发布模式下,它们编译到相同的IL,在调试模式下,添加的指令不起任何作用,实际上是冗余的。你的观点是什么?@AhmedAbdelhameed我不参与IL或调试器,只参与i486。我只知道它会消耗CPU时间。发布版本中没有概念上的差异,也没有速度上的差异。在调试中,它会减慢进程。所以在调查之后,我发现如果一个方法的末尾有一个
}
,那么这个额外的代码就是允许对它进行步进和监视,就像你可以验证的那样。有了电子商务,就没有必要的步骤和间谍。
public void Test() => this.id = "fdsafdsa";