Effective C# Item8:确保0是值类型的有效状态

    .NET会将对象的值默认设置为0,对于值类型来说,例如struct,我们无法阻止开发人员将结构体中的成员设置为0,因此,我们需要将0设置为有效状态。

    对于枚举类型来说,如果通过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方法中对成员变量赋默认值,以避免出现空指针异常的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值