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

原创 2011年05月07日 13:38:00

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

再谈python的变量作用域

一直觉得python的作用域不是什么难点,但是前几天在另一个博客平台上看到一段代码,又把我弄糊涂了,于是看书,把作用域又看了一遍,重新总结一下知识要点和坑,做个笔记 所有代码基于python2.7....
  • u012374229
  • u012374229
  • 2015年09月08日 12:41
  • 743

第一视角射击游戏

一。新建关卡 File,Save Scene, File,New Scene, File,Save Scene as... ,Level02.unity 1.建立场景 从...
  • u014749760
  • u014749760
  • 2014年10月01日 20:44
  • 1187

06 C# 第四章 方法和参数

方法和参数内容比较少,只是整理一下,留个印象吧。 一个最简单的方法调用: 命名空间:就是一种分类嵌套机制,按照自己程序的业务需要把类分门别类的组织起来。 很有意思的是命名空间...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2013年02月04日 08:59
  • 1115

技术向:一文读懂卷积神经网络

自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。...
  • yewei11
  • yewei11
  • 2015年12月14日 19:52
  • 610

Vue 常用API整理 1 - 组件属性与方法

Vue 常用 API 整理 1 - 组件属性与方法1. 单文件组件说明 .vue 文件是一个自定义的文件类型,用类HTML语法描述一个Vue组件。每个 .vue 文件包含三种类型的顶级语言块 ...
  • mjzhang1993
  • mjzhang1993
  • 2017年10月19日 17:00
  • 456

Java for Web学习笔记(三八):自定义tag(6)一些注意

引入的base.jspf 会报错: org.apache.jasper.JasperException: /WEB-INF/tags/template/loggedOut.t...
  • flowingflying
  • flowingflying
  • 2017年02月27日 11:38
  • 628

rocketmq源码分析(1)client模块--生产者的启动

过程:从定义DefaultProducer到DefaultProducer.start()。 一.测试代码 测试代码: public class Producer { public s...
  • sean417
  • sean417
  • 2016年11月10日 20:04
  • 2314

关于苹果99刀公司开发者帐号的申请

申请过程,大家可以在网上找一下。我这里只写下申请中遇到的问题。基本是口述,没有写太多技术性的问题。不喜勿喷 1.开发者帐号申请。会有一个名字。这个名字还请大家不要乱填。 2.邓白氏码的申请...
  • hengshujiyi
  • hengshujiyi
  • 2013年05月16日 11:17
  • 999

Unity粒子系统 Unity3D ParticleSystem粒子系统(3.5版)

http://www.cnblogs.com/sevenyuan/archive/2012/08/07/2626771.html Unity Manual > User Guide > Bui...
  • chenluwolf
  • chenluwolf
  • 2014年01月29日 00:02
  • 4188

jersey Rest请求URI路径构造

https://jersey.java.net/nonav/documentation/latest/user-guide.html Table of Contents Preface1....
  • zeng_84_long
  • zeng_84_long
  • 2013年06月02日 12:15
  • 14053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Variable 'X' is used before it has been assigned a value. A null reference exception could result at runtime.
举报原因:
原因补充:

(最多只允许输入30个字)