C# 学习经验分享

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#, 更为有效 。

104eda7b13ffd751f5e310d7d4dcee5b.png

*REPL是什么

REPL(发⾳ “REP-UL”)是⼀种编程语⾔与计算机对话的交互式⽅式。早期应⽤在 Python 中, 现在很多编程语⾔都⽀持 REPL。实际上 REPL 做了四个步骤:

Read - 读⼊⽤户的输⼊代码(如输⼊的 C# 语句)

Evaluate - 评估输⼊代码(检查语法 / 了解代码意思)

Print - 打印执⾏结果结果

Loop - 继续交互, 循环 1,2,3 步的⼯作

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

要在 .NET 使⽤ REPL , 你可以使⽤第三⽅的 REPL ⼯具 , 在终端执⾏以下命令

dotnet tool install --global dotnet-repl
安装成功后,在终端下输⼊以下命令就可以进⼊ REPL 环境了
dotnet repl

进⼊后,你可以在⾥⾯输⼊任意代码块,来完成运⾏

9e3640f613ecab16e01ce42d5c4624ea.png

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

0ad2984766798d302470b844ef564157.png

如果你不喜欢⽤命令⾏的⽅式 ,介绍⼀个官⽅的⼯具 .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

如下图所示:

a75a5c120256cb0051ef310f27b8e70e.png

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

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

如下图所示:

6a2838735198940cb702e150e71cc8ba.png

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

LINQ语言

LINQ 是⼀系列直接将查询功能集成到 C# 语⾔的技术统称。LINQ 也是在 C# 2.0 中诞⽣ , 应⽤在 SQL 数据库、XML ⽂档、以及各种 Web 服务中。借助 LINQ,查询成为了最⾼级的语⾔构造,就像类、⽅法和事件⼀样。如下图所示:

c634ef548e01dd5e522143890e18769d.png

我个⼈⽐较喜欢⽤ 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 (了解更多请访问https://github.com/sjdirect/abot)来完成。

186610c5e59046dfc3f2f7dfc541da50.png

怎么写好C#

每⼀个编程语⾔,都有⾃⼰的编写规范,也是评价好的代码的标准 。在官⽅有⾮常好的编码规则建议⼤家阅读(https://docs.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/coding-conventions), 这对写好 C# 的代码⾮常有帮助,你也可以多看看 GitHub 上的开源项⽬, 也会有很⼤帮助。

d9af4fd7f7f77244cec8f9f116ca1d9f.png

后记

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

8a25a2b82b7f7d395f88d00889ca7d11.png

*相关学习资源

1.C# 学习 https://docs.microsoft.com/zh-cn/dotnet/csharp/

2.C# Lambda 表达式https://docs.microsoft.com/zh-cn/dotnet/csharp/languagereference/operators/lambda-expressions

3. C# LINQ 表达式 https://docs.microsoft.com/zh-cn/dotnet/csharp/linq/

4.NuGet 相关知识 https://docs.microsoft.com/zh-cn/nuget/

往期推荐:

CA周记 - 2022年的第一课Rust

CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发

CA周记 - 通过 Azure ML + GitHub + GitHub Action 打通 ML 开发的任督二脉

CA周记 - 宇宙最強的IDE - Visual Studio 25岁生日快乐

CA周记 - “探店”低代码

CA周记 - 云上“炼”码兵器 GitHub Codespaces

更多原创文章与资源共享,请关注Kinfey Techtalk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM再出手,软银攀登新高山

当下秋意渐浓&#xff0c;那场贯穿整个夏季&#xff0c;引起舆论热潮的软银收购英国芯片巨头ARM案&#xff0c;总算于本月初尘埃落定。 然而时过未半月&#xff0c;易主后的ARM 9月20日宣布推出最新处理器Cortex-R52&#xff0c;官方强调这款具备先进安全特性的实时处理器将主要…

有限服务器延时计算_机房设备功率统计,UPS不间断电源和蓄电池的计算选择

当然了&#xff0c;也可以不用这么麻烦&#xff0c;网上有UPS计算器的&#xff0c;输入条件直接求个结果就行了。弱电笔记&#xff5c;弱电&#xff08;安防&#xff09;计算器诺&#xff0c;就上面那个&#xff01;下面进入正文&#xff1a;一个计算机机房有4台PC机&#xff0…

linux把2块盘挂到一个分区,linux系统如何挂载第二块硬盘

云主机有两块硬盘&#xff0c;第一块硬盘盘一般为10G&#xff0c;用于安装系统&#xff0c;第二块磁盘根据云主机类型不同&#xff0c;大小也不相同。我们建议您在使用的时候第二块硬盘作为数据盘&#xff0c;存放你的网站数据&#xff0c;这样在您恢复系统的时候&#xff0c;数…

JavaScript:改变li前缀图片和样式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>无标题文档…

Visual Studio/SQL Server系统开发常见问题归纳

问题1.在利用C Sharp(操作系统为Windows7 64位)将Excel数据导入到SQL Server 2005中时,出现如下提示: 解决办法:VS菜单栏 生成→“配置管理器→平台→新建→x86。

IOS学习笔记七之KVC和Key路径

1、KVC介绍 1&#xff09;、KVC是由NSKeyValueCoding协议提供支持最基本的属性和两个方法如下 setValue:属性值 forkey:属性名&#xff1a;为指定属性设置值 valueForKey:属性名 &#xff08;得到或者指定属性的值&#xff09; 2&#xff09;、当设置value为nil的时候&am…

Xamarin效果第十八篇之GIS中复合型Mark

在前面一篇文章中简单在GIS上添加了最基础的Mark,今天再次分享一下早几天摸索的复合型Mark;啥也不说了都在效果里:1、关于数据我就是直接抓的高德的(至于后面需要的参数那就自行抓):https://restapi.amap.com/v3/airquality/aqilist?2、至于Mark无非就是用了CompositeSymbol:C…

Cent OS yum 安装 Adobe flash player

Cent OS yum 安装 Adobe flash player 桌面打开浏览器访问&#xff1a;http://get.adobe.com/cn/flashplayer/。网页会判断操作系统和浏览器并下载 Flash Player&#xff08;支持Firefox浏览器&#xff09;。 或者直接下载&#xff1a; i386系统 wget http://linuxdownload.ado…

WPF定时刷新UI界面

代码&#xff1a; using NHibernate.Criterion; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading; using System.Wi…

找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...

作者 | 永远在路上【】责编 | 胡巍巍出品 | CSDN博客线程线程的概念&#xff0c;百度是这样解释的&#xff1a;线程(英语&#xff1a;Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的…

《C prime plus (第五版)》 ---第11章 字符串和字符串函数---4

字符串的例子&#xff1a; 1.字符串排序&#xff1a; 应用范围&#xff1a;准备花名册&#xff0c;建立索引以及很多情况下都会用刀字符串的排序。这个程序的主要工具就是strcmp(). 算法&#xff1a;读一个字符串数组&#xff0c;对它们进行排序并输出。 #include<stdio.h&g…

linux系统中scanf函数,Linux下scanf宽度控制问题

scanf在不同编译器上传参顺序不一样&#xff0c;大部分都自右向左 &#xff0c;但有些编译器我无法找到规律scanf("%3c%2c",&ch1,&ch2);printf("%c,%c",ch1,ch2);以上两句执行输入&#xff1a;abcde在VC&#xff0c;TC 这两个编译器上都能正常输出…

SQL Server 编写自动增长的字符串型主键

1、编写标量值函数ICONVERT2STRING CREATE FUNCTION ICONVERT2STRING(@N INT,@F INT) RETURNS VARCHAR(10) AS BEGIN DECLARE @M INT DECLARE @L0 INT DECLARE @CH VARCHAR(10) DECLARE @ST VARCHAR(20) SELECT @CH= SELECT @ST=CONVERT(VARCHAR(10),@N) SELECT @ST=RTRIM(@ST)…

XElement 和 XDocument 到底有什么区别?

咨询区 Rana请问在xml操作中&#xff0c;XElement 和 XDocument 到底有什么区别&#xff1f;回答区 nawfal微软官方文档&#xff1a;https://msdn.microsoft.com/en-us/library/bb675196.aspx 上说的特别清楚&#xff0c;假定你有这样一个 test.xml 文件。<Root><Chil…

IOS学习笔记八(KVO)

1、KVO介绍 KVO机制NSKeyValueObserving协议支持&#xff0c;NS遵循了这个协议 &#xff0c;所以NSObject的子类都可使用协议中的方法&#xff0c;下面方法可以注册监听 添加监听器 addObserver: forKeyPath: options: context: 删除监听 removeObserver: forKeyPath: //重…

苹果、联想及华硕均看准美国电脑运输的增长

据国外媒体雅虎金融报道&#xff0c;根据国际数据公司的研究&#xff0c;美国个人电脑在4Q14中下跌至1820万台&#xff0c;在4Q15中下跌至1740万台&#xff0c;跌幅4.3%。而苹果、联想和华硕的产品出货量却呈现上市趋势。苹果出货量上升8.9%&#xff0c;至220万台&#xff0c;华…

CentOS下为Web网站性能做测试

CentOS下为Web网站性能做测试时间:2014-12-08 01:33来源:loosky.net 作者:自由的风 举报 点击:429次Webbench是知名的网站压力方面的测试工具&#xff0c;它是由Lionbridge公司开发。官方主页&#xff1a;http://home.tiscali.cz/~cz210552/webbench.html在运维工作中&#…

如何升级浏览器_前谷歌员工爆料:谷歌工程师们是如何合谋“杀死”IE6浏览器的...

浏览器在互联网中的地位可见一斑&#xff0c;甚至可以说&#xff0c;它是比搜索引擎和社交软件更强的流量入口。微软IE6当年在2001年作为Windows XP的默认浏览器发布&#xff0c;比Chrome首次发布还要早六年。 但是&#xff0c;谷歌Chrome却后来居上&#xff0c;如今的市场份额…

安卓设备刷linux发行版,绝对精华,大牛教你在Android系统上安装linux发行版

Install linux distribution(Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux) on Android system在Android系统上安装linux发行版(Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux)1、所用的手机类型为Samsung Note2 Verizon i6052、…

C#格式化字符串大全

1、格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0.20) 默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数 string.Format("{0:…