c# - 在c#中使用表达式体语法的以下方式有区别吗?
问题描述
public DateTime Date => DateTime.Now;
public DateTime Date { get => DateTime.Now; }
两者之间有区别还是具有不同语法的等效代码?
解决方案
两种方式都会产生相同的 IL。
为了
using System;
public class Program {
public DateTime MyDate1 { get => DateTime.UtcNow; }
public DateTime MyDate2 => DateTime.UtcNow;
public void Main() {
}
}
两个版本的缩写 IL 是(我使用https://sharplab.io):
// Methods
.method public hidebysig specialname
instance valuetype [mscorlib]System.DateTime get_MyDate1 () cil managed
{
// Method begins at RVA 0x2050
// Code size 6 (0x6)
.maxstack 8
IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow()
IL_0005: ret
} // end of method Program::get_MyDate1
.method public hidebysig specialname
instance valuetype [mscorlib]System.DateTime get_MyDate2 () cil managed
{
// Method begins at RVA 0x2050
// Code size 6 (0x6)
.maxstack 8
IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow()
IL_0005: ret
} // end of method Program::get_MyDate2
(...)
// Properties
.property instance valuetype [mscorlib]System.DateTime MyDate1()
{
.get instance valuetype [mscorlib]System.DateTime Program::get_MyDate1()
}
.property instance valuetype [mscorlib]System.DateTime MyDate2()
{
.get instance valuetype [mscorlib]System.DateTime Program::get_MyDate2()
}
推荐阅读
- javascript - 第三方软件包中的“require(./.....”)的 Webpack 捆绑问题
- xslt -
输出到变量并访问它 - spring-batch - 尝试为 Spring Batch 模式和应用程序配置单独的数据源时 Spring Boot 启动应用程序错误
- cookies - cookie和ip的关系
- python - 计算特定 bin 中的元素数
- java - 如果一对哈希图中的值与另一对中的键匹配,有什么方法可以解决?
- unix - 提取两个时间戳之间的日志
- javascript - 在所有承诺之后调用函数
- ruby-on-rails - 为什么 NoMethodError 在开发环境中不显示异常?
- mysql - Sequelize - 通过带有外键的表