前言
C#从语言上来说还是比较好用的,有一些别的语言没有的但是很好用的语法这里推荐一下。
命名规约
【强制】代码中当且仅当
私有成员
可以使用下划线
开始【强制】
类名
、类的属性
、方法名
、命名空间
使用UpperCamelCase大驼峰
风格,英文单词首字母大写,必须遵从驼峰形式,但以下情形例外(领域模型的相关明明)CEO / DBO 等。正例:SysuserController / ItemInfo / TcpHelper / GetInfo()
反例:sysuserController / Iteminfo / TCPHelper / getInfo()
【强制】
参数名
、成员变量
、局部变量
都统一使用lowerCamelCase小驼峰
风格,除首单词外其他单词首字母大写,必须遵从驼峰形式。正例:localCache / userList
【强制】
常量
命名全部大写
,单词间用下划线隔开,力求语意表达完整清楚,不要嫌名字长。正例:MAX_STOCK_COUNT
反例:MAX_COUNT
判断非空并取值
传统写法
1 | if (resultVo != null && resultVo.code == 0){} |
推荐写法(is 模式表达式)
1 | if (resultVo is { code: 0 }){} |
示例2
1 | if (((Button)sender).Tag is ZRecordModel recordModel){} |
示例3
1 | if (quesResultsWindow != null && quesResultsWindow.Visibility == Visibility.Visible) |
优化后
1 | if (quesResultsWindow is { Visibility: Visibility.Visible }) |
优化后
1 | if (!(sender is Button { Tag: VoteItemModel voteItem })) |
??
1 | //当a不为空时返回a,为null时返回b |
??=
1 | if (classroomExamWindow == null) |
替换为
1 | classroomExamWindow ??= new ExamWindow(this); |
?.
不为null时执行后面的操作。
例如:
1 | int? firstX = null; |
在C# 6.0中,引入了一个 ?.
的运算符,前面的代码可以改成如下形式:
1 | int? firstX = points?.FirstOrDefault()?.X; |
用于在执行成员访问 (?.
) 或索引 (?[
) 操作之前,测试是否存在 NULL。 这些运算符可帮助编写更少的代码来处理 null 检查,尤其是对于下降到数据结构。
1 | int? count = customers?[0]?.Orders?.Count(); |
out 变量
以前,需要将 out 变量的声明、使用为两个不同的语句,如下所示:
1 | int numericResult; |
现在,可将前面两行合并为一行表示:
1 | if (int.TryParse(input, out int result)) |
匿名类
1 | var Aemployee=new { |
匿名方法
1 | //匿名方法只使用一次 |
case when
1 | class Person |
using
1 | using (Process ffmpeg = new Process()) |
替换为
1 | using Process ffmpeg = new Process(); |
switch
模式匹配
模式匹配是C# 7.0引入的一项功能,它使我们能够更便捷地进行条件判断和类型转换。
通过模式匹配,我们可以根据对象的类型、结构、属性等特征进行匹配,并且在匹配成功后执行相应的代码块。
类型模式匹配
1 | object obj = 42; |
类型模式匹配和变量模式匹配的组合:
1 | object obj = "hello"; |
属性模式匹配
1 | public class Person { |
类型和属性匹配
1 | private void BtnQuestionsClick(object sender, RoutedEventArgs e) |
集合模式匹配
1 | List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; |
复杂一点
1 | List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; |
合并模式匹配
1 | int x = 5; |
switch模式匹配
示例1
1 | object obj = 5; |
示例2
1 | public abstract class Shape { } |