- 介绍
- 具体案例
- 使用 using static 指令
- 在 case 语句中使用 when 子句
- 总结
随着.net core
越来越流行,对.net core
基础知识的了解,实际应用等相关的知识也应该有所了解。所以就有了这篇文章,案例都是来自阅读的书籍,或者实际工作中感觉比较有用的应用。分享亦总结。
本文主要介绍 .net core
相关的基础知识案例。
【导语】
使用 using static
指令,可用像引入命名空间那样引入某个类型(该类型是静态或者包含静态成员)。引入类型后,在代码中访问器静态成员时可以省略类型名称。
本例以 System
命名空间下比较有代表性的两个类做演示。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:在文件的顶部,使用 using static
指令引入 Console
和 Math
两个类。
using static System.Console;
using static System.Math;
步骤3:此时访问 Console.WriteLine
方法可以不写 Console
类的名称。
WriteLine("Hello World!");
步骤4:同样,访问 Math
类也不用写类名 Math
。
WriteLine($"5 的平方为:{Pow(5d, 2d)}");
WriteLine($"-650 的绝对值是:{Abs(-650)}");
WriteLine($"16,33 中最小的数是:{Min(16, 33)}");
其中 Abs
、Pow
以及 Min
都是 Math
类公开的静态方法,如果不使用 using static
指令,则上面三行代码就应该写成如下形式。
Console.WriteLine($"5 的平方为:{Math.Pow(5d, 2d)}");
Console.WriteLine($"-650 的绝对值是:{Math.Abs(-650)}");
Console.WriteLine($"16,33 中最小的数是:{Math.Min(16, 33)}");
显然,使用了 using static
指令后,代码可以更加简练。
【导语】
case
语句后面除了使用常量值外,还可以进行类型匹配。为了让类型匹配更加精准,可以在 case
语句后面加上 when
子语句。 when
子语句所使用的表达式必须返回布尔值,只有当 when
子语句返回 true
时,该 case
语句才会被执行。
所以,when
子语句就相当于给 case
分支增加一个额外的条件,以进行更加细致的筛选。例如,通过类型匹配可以配出一个数组对象实例,可是这个数组有可能是空数组(元素个数 为 0),在 case
分支处理时,开发者可能会考虑当出现空数组时另外处理,此时,when
子语句就发挥作用了。以下代码在 switch
语句块中设定两个 case
分支,这两个分支都接受数组类型的对象,只是其中一个明确接受空数组。
case Array arr when arr.Length == 0:
...
break;
case Array arr:
...
break;
下面的实例将会进一步演示 when
子句的用法。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:在生成的 Program
类中增加一个静态方法。该方法接收一个 object
类型的参数,并使用 switch
语句块进行分支处理,如下所示。
static void DisplayInfo(object instance)
{
switch (instance)
{
case null:
Console.WriteLine("对象未实例化。");
break;
case Array arr when arr.Length == 0:
Console.WriteLine("这是个空数组。");
break;
case Array arr:
Console.WriteLine($"数组包含 {arr.Length} 个元素。");
break;
case IList ls when ls.Count == 0:
Console.WriteLine("这是个空列表。");
break;
case IList ls:
Console.WriteLine($"列表总共有 {ls.Count} 项。");
break;
}
}
null
值不会匹配任何类型,所以要作为一个常量值来筛选。在使用 when
子句时一定要把握好 case
的顺序。例如上面代码中对空数组的分析,假设把两个 case
语句做以下调换。
case Array arr:
Console.WriteLine($"数组包含 {arr.Length} 个元素。");
break;
case Array arr when arr.Length == 0:
Console.WriteLine("这是个空数组。");
break;
这样会发生编译错误。因为不论数组中是否包含元素,第一个 case
语句都能匹配,这样会使得第二个 case
语句永远无法匹配,等同于第二个 case
语句后面的代码永远不会被执行。
步骤3:分别向 DisplayInfo
方法中传递不同的对象进行测试。
// 测试一:空引用
DisplayInfo(null);
// 测试二:空数组
int[] intarr = { };
DisplayInfo(intarr);
// 测试三:空列表
List listet = new List();
DisplayInfo(listet);
// 测试四:包含元素的数组
byte[] btarr = { 36, 2, 54, 7 };
DisplayInfo(btarr);
// 测试五:包含列表项的列表
List listint = new List { 21, 13, 62, 8, 19 };
DisplayInfo(listint);
步骤4:按下 F5 快捷键运行项目,可以看到以下内容。
本文到这里就结束了,下一篇将介绍面向对象相关的知识案例。