Effective C# Item8:确保0是值类型的有效状态
2014-07-24 10:57
357 查看
.NET会将对象的值默认设置为0,对于值类型来说,例如struct,我们无法阻止开发人员将结构体中的成员设置为0,因此,我们需要将0设置为有效状态。
对于枚举类型来说,如果通过new的方式新建一个枚举类型的对象,那么对象的值是0,代码如下。
上述代码的运行结果是向控制台中输出0,但是EnumSex中并没有对0进行定义,因此,这时,sex对象的状态已经是一个非法状态了。
很多情况下,为了解决这个问题,我们都是这样来使用枚举
以上面这种方式来做,是可以避免“0”问题,但是我们来查看以下代码。
上述代码的执行结果是向控制台中输出0,因为当我们通过new的方式新建一个Employee类型的对象时,会初始化Sex,Sex在初始化后的值就是0。
我们再来看下面的代码。
上述代码在执行过程中,是会抛出空指针异常的,究其原因,当我们在通过new的方式新建一个Employee类型的对象时,会初始化Name属性,如果程序没有对其进行设置,默认的初始值是空,这时直接调用Name属性是没有问题的,但是调用Name属性的方法(这里是ToString()方法),就会抛出空指针异常。
因此,我们在程序中,首先应该对“0”的情况进行处理,以保证“0”是一个合法的状态;其次,我们应该考虑如何在默认构造函数或者属性的get方法中对成员变量赋默认值,以避免出现空指针异常的情况。
对于枚举类型来说,如果通过new的方式新建一个枚举类型的对象,那么对象的值是0,代码如下。
代码 public enum EnumSex { Female = 1, Male = 2 } private static void TestEnum() { EnumSex sex = new EnumSex(); Console.WriteLine(sex.ToString()); }
上述代码的运行结果是向控制台中输出0,但是EnumSex中并没有对0进行定义,因此,这时,sex对象的状态已经是一个非法状态了。
很多情况下,为了解决这个问题,我们都是这样来使用枚举
EnumSex sex = EnumSex.Male;
以上面这种方式来做,是可以避免“0”问题,但是我们来查看以下代码。
代码 public struct Employee { private string m_strName; public string Name { get { return m_strName; } set { m_strName = value; } } private EnumSex m_sex; public EnumSex Sex { get { return m_sex; } set { m_sex = value; } } } private static void TestEmployee() { Employee emp= new Employee(); Console.WriteLine(emp.Sex); }
上述代码的执行结果是向控制台中输出0,因为当我们通过new的方式新建一个Employee类型的对象时,会初始化Sex,Sex在初始化后的值就是0。
我们再来看下面的代码。
private static void TestEmployee() { Employee emp= new Employee(); Console.WriteLine(emp.Name); Console.WriteLine(emp.Name.ToString()); }
上述代码在执行过程中,是会抛出空指针异常的,究其原因,当我们在通过new的方式新建一个Employee类型的对象时,会初始化Name属性,如果程序没有对其进行设置,默认的初始值是空,这时直接调用Name属性是没有问题的,但是调用Name属性的方法(这里是ToString()方法),就会抛出空指针异常。
因此,我们在程序中,首先应该对“0”的情况进行处理,以保证“0”是一个合法的状态;其次,我们应该考虑如何在默认构造函数或者属性的get方法中对成员变量赋默认值,以避免出现空指针异常的情况。
相关文章推荐
- 改善C#程序的50种方法 条款8:确保0为值类型的有效状态
- 确保0为值类型的有效状态
- 条款8:确保0为值类型的有效状态
- 《Effective C#》条款8:确保0为值类型的有效状态
- 《Effective C#》条款8:确保0为值类型的有效状态
- Effective C# Item8:确保0是值类型的有效状态
- EffectiveC#8--确保0对于值类型数据是有效的(初始化问题)
- 保证0为值类型的有效状态<.NET资源管理>
- Effective C# 原则8:确保0对于值类型数据是有效的
- 8.确保0对于值类型是有效的
- 《Effective C#》Item 8:确保“0”在值类型中是有效的
- 转:《Effective C#》Item 8:确保“0”在值类型中是有效的
- Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
- Effective C#阅读笔记-5对于值类型保证0是一个有效状态
- Effective C# 确保“0”在值类型中是有效的
- 《Effective C#》Item 8:确保“0”在值类型中是有效的
- 《Effective C#》读书笔记——条目19:保证0为值类型的有效状态<.NET资源管理>
- 取double类型的几位有效数字
- 确保已安装文件类型 .aspx 的应用程序
- 改变系统状态栏颜色(仅4.4或以上有效)