一、概述
& ^2 }( y6 I: v; m8 Q+ M" J% q 当一个集合作为入参传入另外一个方法时,我们首先需要判空处理,以免在空集合上处理引发异常,判空处理的方式有多种,下面就来一一列举.+ Z2 O S8 l7 L1 v! l
二、是否为 null* a# o# e& r5 D% B) {3 t' P# x
如果一个集合没有实例化,那集合就是null,判null的常用以下几种方式:
+ P0 ?, j/ A7 d7 O/ v' `方式一:== null6 q$ T+ s- c# @. e ^ ~
- class Program
- {
- static List<Student> stuList;
- static void Main(string[] args)
- {
- if (stuList == null)
- {
- Console.WriteLine("stuList is null");
- }
- Console.ReadKey();
- }
- }
-
- public class Student
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
) X3 w# U6 p+ k% \" q. v! z5 [" @' ~' u方式二:is null
5 V$ |4 z8 J4 \ F
三、是否为空0 I i: L/ a5 h" r7 M% S
在上面我们先判断了集合不为null以后,如果还需要检查集合是否有元素,也是有多种方式可以实现:
; D" N) ]. m" k4 n方式一:stuList.Count == 0# V2 a6 f6 C, t
- if (stuList.Count == 0)
- {
- Console.WriteLine("stuList is empty");
- }
0 n6 t" e1 ]) y8 I
方式二:!stuList.Any() // 确定序列是否包含任何元素。
0 w$ E `! s: c! O- Q9 C// 返回结果:! u8 v" Z) D. x
// true 如果源序列中不包含任何元素,则否则为 false。
( M; D1 f$ w+ C. w- if (!stuList.Any())
- {
- Console.WriteLine("stuList is empty");
- }
那如果我既想检查他是否为null又想检查是否为null,有没有简洁点的语法呢?这时候我们就可以用 ?. 来操作了。, t/ h9 @, q# G! j; X% V
实例如下:- class Program
- {
- static List<Student> stuList = new List<Student>();
- static void Main(string[] args)
- {
- //if (stuList is null)
- //{
- // Console.WriteLine("stuList is null");
- // throw new Exception("stuList is null");
- //}
-
- //if (!stuList.Any())
- //{
- // Console.WriteLine("stuList is empty");
- //}
-
- stuList.Add(new Student() { Name = "zls",Age = 25});
- if (stuList?.Count != 0)
- {
- Console.WriteLine("StuList is neither null nor empty");
- }
-
- Console.ReadKey();
- }
- }
-
- public class Student
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
9 S0 I: q, W+ W4 I/ O
这样就可以保证stuList为null的时候获取集合的数量也不会引发异常。
" k( i; s& \, g. O: I; O7 @5 F3 N |