C# “使用”的好处是什么;表达式体函数和性质“;

C# “使用”的好处是什么;表达式体函数和性质“;,c#,c#-6.0,C#,C# 6.0,我确实见过很多人使用这个新功能,但是使用这些表达式有什么好处呢 : public override string ToString()=>string.Format(“{0},{1}”,第一,第二); 公共字符串文本=> 格式(“{0}:{1}-{2}({3})”,时间戳,进程,配置,用户); 这个问题不同于,因为我不仅要问性能和效率是否发生了变化,还要问编译代码(IL代码)的差异,以及它是否是最佳实践,是否应该在现实世界中使用 这个问题也是而不是,因为我要求的是现实生活中的企业经验,而不是建

我确实见过很多人使用这个新功能,但是使用这些表达式有什么好处呢

:
public override string ToString()=>string.Format(“{0},{1}”,第一,第二);
公共字符串文本=>
格式(“{0}:{1}-{2}({3})”,时间戳,进程,配置,用户);
这个问题不同于,因为我不仅要问性能和效率是否发生了变化,还要问编译代码(IL代码)的差异,以及它是否是最佳实践,是否应该在现实世界中使用


这个问题也是而不是,因为我要求的是现实生活中的企业经验,而不是建议。因此,请不要推荐,但请解释您为什么会或为什么不使用该功能,以及您使用该功能的经验

它提供了更好的可读性,并在代码中节省了一些空间。回答我的一个问题就更好了。我已经测试过,如果IL代码与以下结果相同:

。。。将生成相同的IL代码:

00993376  call        [random value]
0099337B  mov         dword ptr [ebp-40h],eax  
0099337E  mov         ecx,dword ptr [ebp-40h]  
00993381  call        71886640  
00993386  nop  
        }
00993387  nop  
00993388  lea         esp,[ebp-0Ch]  
0099338B  pop         ebx  
0099338C  pop         esi  
0099338D  pop         edi  
0099338E  pop         ebp  
0099338F  ret  
[random value]
部分是唯一已更改的代码,这是有意义的,因为它在每次编译时都会更改


我仍然是一名在校学生,因此我只能从我的角度回答其他问题(这不是企业观点):

  • “表达式体函数和属性”看起来确实是一个很好的实践,因为它的代码更紧凑,可读性更强。(thx至和)

  • 使用它们也是有意义的,因为它们看起来更模块化,更像OOP代码


主体表达式只提供了一种简洁明了的方式来声明只读属性。
从性能的角度来看,您可以这样写:

public bool MyProperty {
    get {
        return myMethod();
    }
}

private bool myMethod() {return true;}
或者这个:

public bool MyProperty => myMethod();
private bool myMethod() {return true;}
没有区别,因为它以相同的方式被翻译成
IL


但请注意这一点:主体表达式是Visual Studio 2015及更新版本默认提供的功能,但如果您想在较旧的VS版本中使用,则需要从NuGet安装C#6.0。

简洁。写同样的东西,但更短。它允许开发人员省略大括号和返回语句。可读性?紧凑性?汽车性能的好处是什么?有趣的方法。它是否还提供性能增强功能?有关性能和生成的IL的区别,请参阅链接问题:它是相同的。至于它是否是良好的实践,或者使用它的好处是什么;这是一种主观意见(因此,对于SO而言,这是一种离题的意见)。使用它,如果你喜欢它,不要使用它,如果你不喜欢它。它比较短,所以对很多人来说已经足够了。但我个人会避免使用它,因为涉及的表达式会变得更长或更复杂。其他Visual Studio IDE也支持c#6.0:您也可以在方法声明中使用表达式体
public bool MyProperty=>myMethod();私有bool myMethod()=>true这是一个关于使用这些表达式的好处的简短而好的回答。再加1!尽管它使方法更加简洁,但我发现扩展的方法声明更容易直观,因为它们在类成员之间保持一致的缩进。
public bool MyProperty => myMethod();
private bool myMethod() {return true;}