Nothing 和 Is

本文深入探讨了VB.NET中Nothing与C#中null的区别,包括它们在值类型和引用类型的应用、字符串池的存在、比较方法、安全转换判断以及在代码实践中的使用场景。通过对比分析,揭示了两种语言在处理空值时的差异及各自特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我们通常认为Nothing(VB.NET)中和null(C#)中的功能是完全一样的。其实如果你这样认为的话,就大错特错了。

       的确,一般情况下,如果把null(vb中把Nothing赋值给一个引用类型,那么此二者结果是等同的)。但是VB.NET中还允许你把Nothing赋值给值类型(无论是基本值类型,还是自定义的Struct值类型),这在C#中是不允许的(造成编译错误)。比如:

    Dim i As Integer = Nothing

      上面这段代码的意思是:给i设置自身类型的初始值(相当于i=0),在C#中等同于:

    int i = default(int);

      另外,VB.NET的Is是用来判断“两个引用对象之间是否相同,“=”只被用于检测两个对象的内容值是否相同(即等价于调用运算符重载=,并且等价于直接调用Equals方法进行数值比较)。

    Dim s1 As String = "a"
    Dim s2 As String = "a"
    Console.WriteLine(s1 Is s2)

      以上就严格证明了String的确是存在“字符串池”的,因为两者引用对象都是s1所指向的那个存储空间。相比较之下,C#要证明就不是很容易了。因为C#的双等于虽然可以直接作用于任意两个类进行比较,而且比较的是两个类的句柄地址,但是它可以被重写(通过运算符重载“双等于”特性,也等价于调用Equal函数),这样往往无法分辨清楚究竟是比较两者之间存储的实质内容是否一致,还是对象引用地址是否一致。

      在两个引用类型中,若要比较某对象是否可以安全转化为另外一个对象,VB.NET直接可以使用“TypeOf(实体名) Is 类名”即可。相对应地,C#中直接用“实体名 is 类名”或者“if(实体名 as 类名==null)”来加以判断

        '添加参数
        If Param IsNot Nothing Then
            SqlCmd.Parameters.AddRange(Param)
        End If

        这里IsNot用来判断数组Param与Nothing是否相同,来确定,Param数组是否为空,在这里为什么要用IsNot Nothing来做判断呢?怎么不是VbNull等呢?

       其实,Nothing在变量或数组等声明的时候,就应该赋给变量的,比如Dim intA as integer =nothing ,但我们经常不写,我们需要给声明的变量赋其它值或对象,很多编译器IDE对变量都要检查其是否初始化,写上Nothing是一种好的编程习惯,当我们判断一个对象资源是否释放或是否为空时,感觉会很有用例如:

       If Not IsNothing(Me.GetSqlCnn()) Then
              Me.GetSqlCnn().Close()
       End If

       VB.NET 中Nothing是数据类型的默认值,包括值类型、对象类型、自定义类型等,相当于C#中的Null

转载于:https://www.cnblogs.com/lilongsheng/archive/2012/02/19/3226122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值