Variable 'X' is used before it has been assigned a value. A null reference exception could result at runtime.

来源:互联网 发布:中国报告大厅数据库 编辑:程序博客网 时间:2024/05/02 02:01

         在自己做机房收费系统的过程中出现了这样的一个现象:如图

                

      str1 下面出现了一行波浪线.同时提醒自己错出现的错误.提示如下:

       Variable 'str1' is used before it has been assigned a value. A null reference exception could result at runtime.

   在Build的时候会出现以下的警告:

如图:

      问题没有大小之分,只要出现就要去解决它.这个并不是错误,这是VS给出的一个警告,是系统潜在的一个问题. 大概意思是变量在用用之前应赋值,否则在运行是可能会出现空引用错误.

     但是这有可能会发展成一个非常严重的错误.在执行的时候这些警告有可能会变成严重的 NullReferenceException错误

     此错误是一般在执行时是无法处理的,提示会是: 对象的引用未设置到对象的实例!记着在看陈旭的博客中有一篇关于凡客的文章就是出现和此相关的类似错误.文章是凡客网站出现了未处理的错误.借用陈旭博客中的一张图片如下:

    为什么会出现这个问题?

    如何解决这个问题?

    让我们先看看一个简单的例子吧:

Dim str1 As String

          Select Case cboKeyword1.SelectedIndex

                 Case 0

                       str1 = "stuNo"

                 Case 1

                      str1 = "stuName"

                Case 2

                      str1 = "stuSex"

               Case 3

                     str1 = "grade"

              Case 4

                   str1 = "department"

              Case 5

                   str1 = "stuClass"

      End Select

如果在某些情况下.当cboKeyword1.SelectIndex的索引是6的话,那么str1将不会被定义,.而System.String这个类是没有默认的构造函数.也就是str1将会是Null值而不是空字符串值(String.Empty).所以在某些情况下会造成凡客网站出现的类似错误:未将对象的引用未设置到对象的实例!

想要修改这个问题其实很简单,只要加上一个Case Else语句就可以了.如下

Dim str1 As String

     Select Case cboKeyword1.SelectedIndex

            Case 0

                 str1 = "stuNo"

           Case 1

                str1 = "stuName"

           Case 2

                  str1 = "stuSex"

            Case 3

                 str1 = "grade"

            Case 4

               str1 = "department"

           Case 5

               str1 = "stuClass"

          Case Else

             str1 =String.Empty

End Select

      当然上面的并不是很好的方法,更好的是在变量定义的时候给变量设定默认值,这样就可以从根本上防止出现未将对象的引用未设置到对象的实例的类似错误.如下

Dim str1 As String =String.Empty

       Select Case cboKeyword1.SelectedIndex

            Case 0

                str1 = "stuNo"

           Case 1

                str1 = "stuName"

           Case 2

               str1 = "stuSex"

            Case 3

                str1 = "grade"

           Case 4

               str1 = "department"

           Case 5

               str1 = "stuClass"

     End Select

       在这里我用的是字符串类(System.String)作为一个例子.这个同样也应该适用于其它数据类行的变量或者是类的实例.通过上面的小小的修改就可以避免了并消除那些在运行时出现的错误.防患于未然.

       问题到次并没有结束,通过上面的一个"小"错误和凡客出现的"大"问题,给我的感触还是很多的.导致自己程序没有成功的或许就是这么个不经意的一个"忽略".所以我们现在要做的就是尽早的把这些自己所忽略的"波浪线"尽早发现,并及时解决,尽量减少我们的损失和代价.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星关机键失灵怎么办 购机凭证丢了怎么办 滴滴没人接单怎么办 头发干怎么办才好 唯品会东西碎了怎么办 唯品会买东西有质量问题怎么办 来分期不能退货怎么办 商场不肯退衣服怎么办 唯品会衣服坏了怎么办 京东买电视拆机坏的怎么办 余额宝资金冻结怎么办? 余额宝金额冻结怎么办 adidas买了假货怎么办 余额宝冻结金额怎么办 买到不合格地板怎么办 买到翻新地板怎么办 食品里有头发怎么办 家具环保不达标怎么办 买到坏了的食物怎么办 空调检测不合格的怎么办 淘宝卖精仿遇到打假怎么办? 没有收到提货码怎么办 增值税发票超过180天怎么办 花呗借钱还不上怎么办 实体店里没人气怎么办 EMS快件无人签收怎么办 邮政快递丢失了怎么办 快递手机丢了怎么办 拍照签收没收到怎么办 拼多多开店货源怎么办 被购买鉴定投诉怎么办 淘宝上买东西错想用花呗怎么办 淘宝想用花呗买东西差一点怎么办 买了假货怎么办还用吗 免税店买完东西怎么办 淘宝恶意拍单怎么办 二手西服不想要怎么办 苹果8p费电快怎么办 赌博被骗没证据怎么办 异地车子办保险怎么办 淘宝买到旧货怎么办