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

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

d2a506ef837c06732cf534d4.jpg                

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

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

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

如图:

0fccb4964882013754fb96dd.jpg

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

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

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

aeeea8285881dca498250aa5.jpg

    为什么会出现这个问题?

    如何解决这个问题?

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

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)作为一个例子.这个同样也应该适用于其它数据类行的变量或者是类的实例.通过上面的小小的修改就可以避免了并消除那些在运行时出现的错误.防患于未然.

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnqqls/article/details/6402474
个人分类: 软件工程
上一篇系统验收收获
下一篇管理意识
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭