.NET 20 周年的学习挑战赛刚结束了第一阶段, 不知道各位小伙伴参加了没有 ? 有人问现在学习 C# 是不是有点过时 ? 也有人问现在 C# 能做什么 ?更有人问学习 C# 能否找到工作 ? 或者你从不同的专家 ,不同的从业者可以有不同的答案 。但我更关心一个比较基础而且对更多人希望得到解答的问题 - 如何学习好 C# 。 我是一名 .NET 老兵 , 虽然我的技术栈不断拓宽 , 但从来没有放弃 C# 。 希望利用该文章 , 和大家分享一些 C# 学习心得。

学习环境

早期学习 C# , 相信大家都喜欢去 Windows 安装 Visual Studio 或者基于 mono 在 macOS / Linux 下安装 MonoDevelop IDE 。 但 .NET 开源后, 学习 C# 就不仅可以在 Windows , 还可以在 macOS / Linux 下进行学习 , 开发的环境除了 Visual Studio 外 ,还增加了 Visual Studio Code , 还有像第三方的 JetBrains 的 Rider IDE 等 。 实际上学习编程语言除了这些 IDE 外 , 我建议大家使用 REPL 或者 .NET Interactive 来学习 C# , 更为有效 。

REPL

什么是 REPL

REPL(发音 “REP-UL”)是一种编程语言与计算机对话的交互式方式。早期应用在 Python 中, 现在很多编程语言都支持 REPL。 实际上 REPL 做了四个步骤:

  1. Read - 读入用户的输入代码(如输入的 C# 语句)。
  2. Evaluate - 评估输入代码(检查语法 / 了解代码意思)。
  3. Print - 打印执行结果结果。
  4. Loop - 继续交互, 循环 1,2,3 步的工作。

在早期 , 我用过最好的 .NET REPL 是Xamarin 的 Workbooks 。 它不但可以运行 C# 的代码 ,也可以写一些如 Xamarin for iOS , Xamarin for Android , Xamarin Forms 等效果 , 也可以引入一些第三方库实现一些效果。这对于初期开发 ,和跨平台移动应用原型开发有很多的帮助 。

要在 .NET 使用 REPL , 你可以使用第三方的 REPL 工具 , 在终端执行以下命令

dotnet tool install --global dotnet-repl

安装成功后,在终端下输入以下命令就可以进入 REPL 环境了

dotnet repl

进入后,你可以在里面输入任意代码块,来完成运行

当然你也可以在 REPL 内通过 nuget 增加相关的第三方库/包进行测试 , 如 ImageSharp

如果你不喜欢用命令行的方式 ,介绍一个官方的工具 .NET Interactive , 它是非常好用的 .NET 体系下的 REPL 交互式可视化工具。你可以通过在 Visual Studio Code 中安装 .NET Interactive Notebooks插件 。(如果你希望了解更详细的安装方法,以及使用可以阅读我之前写的这篇文章 .NET Interactive环境介绍) 

Lambda 和 LINQ 是 C# 的语法之美

每个语言都有各自的优缺点 , 和各自的应用场景 , 传统的类型表示, 条件 / 循环语句 , 还有类型描述 , 每个语言都有 ,但 C# 我觉得最优雅的地方是 Lambda 表达式 和 LINQ。 这也是我非常推荐入门的小伙伴精读的内容。
 

Lambda 表达式

Lambda 表达式是一小段代码,它接受参数并返回一个值。 Lambda 表达式类似于方法,但它们不需要名称,并且可以直接在方法体中实现。 C# 在 2.0 的版本上,已经支持了 Lambda 表达式 , 比很多编程语言都要早。

C# 中的 Lambda 表达式与匿名函数一样使用,不同之处在于,在 Lambda 表达式中您不需要指定输入值的类型,因此使用起来更加灵活。 ‘=>’ 是用于所有 lambda 表达式的 lambda 运算符。 Lambda表达式分为两部分,左边是输入,右边是表达式。

表达式 lambda,表达式为其主体:

(input-parameters) => expression

如:

语句 lambda,语句块作为其主体:

(input-parameters) => { <sequence-of-statements> }

如:

 如果您打算在代码中使用 LINQ,那么 Lambda 表达式将是您最喜欢的伙伴。 帮助您将代码逻辑包装在更少的行或内联中。

LINQ 语言

LINQ 是一系列直接将查询功能集成到 C# 语言的技术统称。LINQ 也是在 C# 2.0 中诞生 , 应用在 SQL 数据库、XML 文档、以及各种 Web 服务中。 借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。

如:

 我个人比较喜欢用 LINQ to SQL 的语法, 节约了不少写 T-SQL 语句的时间

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<string> query = from p in context.Products
                               where p.Name == "Reflector"
                               select p.Name;

    IEnumerable<bool> q = query.Select(c => c.EndsWith("Reflector "));

    Console.WriteLine("LINQ to Entities returns: " + q.First());
    Console.WriteLine("CLR returns: " + "Reflector".EndsWith("Reflector "));
}

学会使用 NuGet

NuGet 是 .NET 的包管理器。 NuGet 客户端工具提供了生成和使用包的能力。 NuGet 库是所有包作者和使用者使用的中央包存储库。你可以通过 NuGet 下载很多不同场景的包进行应用 。

像一些小伙伴,在直播提到的爬虫 , 这里就可以利用 Nuget 通过第三方的包 Abot (了解更多请访问 GitHub - sjdirect/abot: Cross Platform C# web crawler framework built for speed and flexibility. Please star this project! +1.)来完成

怎么写好 C#

每一个编程语言 ,都有自己的编写规范, 也是评价好的代码的标准 。 在官方有非常好的编码规则建议大家阅读(C# 编码约定 | Microsoft Docs), 这对写好 C# 的代码非常有帮助 , 你也可以多看看 GitHub 上的开源项目, 也会有很大帮助。


 

后记

新一代的 .NET 很吸引 , 涵盖了多个应用场景 。 C# 作为非常重要的 .NET 编程语言,  也是大家入门的必修课 。 希望大家通过该文章能掌握好学习 C# 的一些工具 , 编程技巧以及相关的要点 。 当然我也希望各位继续参加 .NET 20 周年的学习挑战赛 - ASP.NET Core 开发 。


 

相关学习资源

  1. C# 学习 C# 文档 - 入门、教程、参考。 | Microsoft Docs
  2. C# Lambda 表达式 Lambda 表达式 - C# 引用 | Microsoft Docs
  3. C# LINQ 表达式 C# 中的语言集成查询 (LINQ) | Microsoft Docs
  4. NuGet 相关知识 NuGet 文档 | Microsoft Docs

更多推荐

我的 C# 学习经验分享