.NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配

h4cd
 h4cd
发布于 2019年01月30日
收藏 10

.NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分。

C# 8 中使用模式进行更多操作,主要特性包括:

using 声明

改变需要缩进代码的方式,现在可以编写以下代码,该代码将  using 声明附加到当前语句块的范围,然后将该对象放在其末尾。

static void Main(string[] args)
{
    using var options = Parse(args);
    if (options["verbose"]) { WriteLine("Logging..."); }

} // options disposed here

switch 表达式

C# 8 引入了 switch 表达式,它支持更简洁的语法,因为它是一个表达式,所以会返回一个值,并完全集成在模式匹配中。

switch 关键字是 “infix”,用法 demo:

static string Display(object o) => o switch
{
    Point { X: 0, Y: 0 }         => "origin",
    Point { X: var x, Y: var y } => $"({x}, {y})",
    _                            => "unknown"
};

或者:

static State ChangeState(State current, Transition transition, bool hasKey) =>
    (current, transition) switch
    {
        (Opened, Close)              => Closed,
        (Closed, Open)               => Opened,
        (Closed, Lock)   when hasKey => Locked,
        (Locked, Unlock) when hasKey => Closed,
        _ => throw new InvalidOperationException($"Invalid transition")
    };

异步流

异步流是 C# 8 的另一个主要改进,它需要编译器和框架库匹配才能正常工作。如果要使用 Visual Studio 2019 Preview 2 或 Visual Studio Code 的 C# 扩展的最新预览版进行开发,则需要 .NET Core 3.0 Preview 2 才能使用异步流。

除了 C# 8 相关变化,还包括以下更新内容:

  • IEEE 浮点改进

  • .NET 平台依赖内在函数的改进

  • 引入了一个新的快速 JSON Writer & JSON 文档

  • GPIO 支持 Raspberry Pi

  • Assembly unloadability

  • Windows 原生互操作

详情查看发布公告

下载地址:https://aka.ms/netcore3download

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:.NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配
加载中

精彩评论

keep_wan
keep_wan

引用来自“robortly”的评论

C#最大的优势就是语法糖 很自然,很人性。

引用来自“吕兵阳”的评论

语法糖越多学习成本越高,优秀的语言不需要这些,
照你这么说汇编语法糖不多。学习成本也不高。 高级语言不都是语法糖。问题是没语法糖的语言你驾驭的了吗
手握华为赛神仙
手握华为赛神仙

引用来自“robortly”的评论

C#最大的优势就是语法糖 很自然,很人性。

引用来自“吕兵阳”的评论

语法糖越多学习成本越高,优秀的语言不需要这些,
机器码走起?
eechen
eechen
希望这门语言的语法糖越多越好,反正我又不用,脑壳疼的又不是我.
飞鸿眉敛
飞鸿眉敛
这压根不是语法糖,说这是语法糖的可能只是因为你们看C系语法更多引起。这是支撑函数式编程的模式匹配,了解erlang的一下就能对比到case of
kidfruit
kidfruit

引用来自“xiaoyu123”的评论

一个个asyc/await都抄得杠杠的,就几个装逼的sd语言不抄

引用来自“robortly”的评论

是async/await , C#提供三种异步编程模型 APM EAP TAP 。你说的抄何来之有?

引用来自“xiaoyu123”的评论

@robortly 我说的就是其他语言借鉴c#的异步,现在而言对程序员最友好的异步实现就是c#的,
async/await只有c#实现的最好,其他的要么抄c#,要么自己搞就实现得很猥琐

最新评论(41

你们都是技术宅
你们都是技术宅
消息是好消息,可惜作者英文水平有点差,纠正两点谬误:
1. using声明那里,对象是在作用域之后自动释放,这个语法糖用来替代原来那个using(对象声明){一大坨代码,完了之后自动释放}这个语法糖的,能省下来一对花括号和代码缩进。
2. switch表达式的infix,看不懂没关系,不查查字典就直接复制过来这样好吗。switch表达式和加减乘除一样是中缀表达式,左边是要测试的值,右边是模式匹配的内容,看不懂这个语法的没关系,照着例子认两边就没问题了,模式匹配用熟了以后也是一大利器。
你们都是技术宅
你们都是技术宅

引用来自“eechen”的评论

希望这门语言的语法糖越多越好,反正我又不用,脑壳疼的又不是我.
错了,这些语法糖只有在学习的时候才有点难度,学会之后使用的时候非常自然。C#的Task,lambda、linq,nameof等等语法糖和功能已经是我生活的一部分了,完全想象不到没有语法糖该怎么办了
谋定而动-知止而有得
谋定而动-知止而有得
巨硬的c#竟然还有人在用
来自山卡拉的你
来自山卡拉的你
最怕用语法糖了,一用同事就说看不懂😂
dhssingle
dhssingle

引用来自“robortly”的评论

C#最大的优势就是语法糖 很自然,很人性。

引用来自“吕兵阳”的评论

语法糖越多学习成本越高,优秀的语言不需要这些,

引用来自“keep_wan”的评论

照你这么说汇编语法糖不多。学习成本也不高。 高级语言不都是语法糖。问题是没语法糖的语言你驾驭的了吗

引用来自“简单代码”的评论

再这么抽象下去就快成另外一种汇编了,反正上面的switch看着很难理解。
这是模式匹配,函数式编程那一套,Scala、F#、Erlang都有类似的语法。
只是多一个选择而已,又没逼着人用。
有的选总比没得选好。
InSurprising
InSurprising
编程不就是一门艺术吗,艺术本来就不是所有人都得去欣赏。
l
liaoxuewei

引用来自“robortly”的评论

C#最大的优势就是语法糖 很自然,很人性。

引用来自“吕兵阳”的评论

语法糖越多学习成本越高,优秀的语言不需要这些,

引用来自“keep_wan”的评论

照你这么说汇编语法糖不多。学习成本也不高。 高级语言不都是语法糖。问题是没语法糖的语言你驾驭的了吗

引用来自“简单代码”的评论

再这么抽象下去就快成另外一种汇编了,反正上面的switch看着很难理解。
重要的是最基础的语法一直兼容,“语法糖”不用就不影响就行,喜欢的就用。
简单代码
简单代码

引用来自“robortly”的评论

C#最大的优势就是语法糖 很自然,很人性。

引用来自“吕兵阳”的评论

语法糖越多学习成本越高,优秀的语言不需要这些,

引用来自“keep_wan”的评论

照你这么说汇编语法糖不多。学习成本也不高。 高级语言不都是语法糖。问题是没语法糖的语言你驾驭的了吗
再这么抽象下去就快成另外一种汇编了,反正上面的switch看着很难理解。
天新8206

引用来自“dwingo”的评论

语法糖需要适量, 过量不是好事.
全面学习的话耗时大增; 只大概学学的话虽然看得懂别人写的,但自己去写就容易掉坑,最终还是得学很多东西才能用得好.
最终语法糖能省多少时间? 正常的开发时间中编码能占20%就很高了, 最终省的时间很少,还得照顾新手看得懂代码, 有的时候思考一段代码用什么语法糖更简洁也是需要时间的,不比用最基础的语法写起来快.
当然这不是说语法糖越少越好, 需要的是适度.
同意
吕兵阳
吕兵阳
既然你们这么喜欢语法糖,你们好好学哈哈哈,反正我用Java,没啥成本。
返回顶部
顶部