未将对象引用设置到对象的实例2011-10-12 21:28提问者:Lee2011_6_7|悬赏分:5|浏览次数:2061次using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{public partial class Form1 : Form{public Form1(){InitializeComponent();}public class oper{public int i;public double j;public char k;}private void button1_Click(object sender, EventArgs e){oper[] myOper = new oper[10];myOper[0].i = 1; //这一行报错,未将对象引用设置到对象的实例}}}问题补充:就是问一下这个问题”未将对象引用设置到对象的实例“是什么意思,该怎么解决~2011-10-12 22:23最佳答案首先这里报这个错是因为myOper[0]为空,取不到它的属性i,所以会报错。
其次这里的oper[] myOper = new oper[10]仅仅是实例化了一个数组,但是数组里面的对象是没有实例化的,仅仅是声明了一串oper对象而已。
再次为什么这里如果是int[] abc=new int[10]或者char[] abc=new char[10]再赋值给abc[0]就不会报错呢?这是因为值类型在声明的时候,默认初始值为0;而引用类型在声明时,默认初始值为null。
因为类属于引用类型,所以你这个类数组里的oper对象声明后默认为null,造成了“未将对象引用设置到对象的实例”这个错误。
至于解决方法,你只需要给你要赋值的数组里某一个对象实例化就行了,例如你这里写的:oper[] myOper = new oper[10];myOper[0]=new oper();//加一个对象的实例化myOper[0].i = 1;未将对象引用设置到对象的实例〖文字大小:大中小〗〖打印〗未将对象引用设置到对象的实例一、网络上的一般说法1、ViewState对象为Null。
2、DateSet空。
3、sql语句或Datebase的原因导致DataReader空。
4、声明字符串变量时未赋空值就应用变量。
5、未用new初始化对象。
6、Session对象为空。
7、对控件赋文本值时,值不存在。
8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
9、使用FindControl时,控件不存在却没有做预处理。
10、重复定义造成未将对象引用设置到对象的实例错误.二、(1)所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用DataGrid或gridview或datalist等数据控件时出现.(2)控件名称与codebehind里面的没有对应(3)未用new初始化对象(4)在程序中所引用的控件不存在解决方法:(1)使用try..catch...finally捕捉错误,或直接用response.write()输出所取的变量值(2)查看代码中是否存在未初始化的变量三、SqlConnection.Open未将对象引用设置到对象的实例在使用VS2003开发程序时候有时候操作SqlConnection对象的Open()方法时候会出现未将对象引用设置到对象的实例。
说明:执行当前Web请求期间,出现未处理的异常。
请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息:System.NullReferenceException:未将对象引用设置到对象的实例。
源错误:。
conn.Open();......跟踪调试也肯定可以确定对conn进行new操作但是程序经常在这个地方报错,但是有时候重启服务器或者重启IIS有能正常使用了。
怎么调试也找不到问题那么这个时候可能是你本机上安装的.NETFRAMEEWORK框架有问题,可能没有没有安装SP1.1补丁需要打NETFRAMEEWORK1.1SP1的补丁,到微软官方网站下载安装后就好了。
四、一般出现NullReferenceException异常的我个人总结有以下情况:1、对象所在的命名空间没有引用2、对象没有实例化3、出现异常,实例化失败对象为null五、IIS扛不住的时候,也会出现上面的错误。
当应用程序的用户访问量超过它能承受的范围之后,就会出错。
改善你的程序,使用缓存,尽量减少与数据库交互的次数。
六、我碰到的问题是,无意重置了DataSet引用,后出现这个问题,请大家好好查查自己的代码,是不是在其他地方重新引用了,在我的程序中DataSet被设置成全局对象。
七、当你发现所有的方法不行时,打上.netframework的补丁八、我出现这个错误,仅仅因为网站里面DAL的dll文件失效,业务层实例化不了IDAL里面的对象但也浪费了一下午的时间在调代码上九、为每个可疑的地方添加监视,起初以为是sql语句写错了,查了几遍,换用sql语句还是报同样的错误。
根据google出来的结果,提到对象重定义会引起这样的结果。
根据这一提示,替换掉页面级全局对象,总算搞定了。
classDBOper{/*构造函数没有函数体**c#写的一系列对数据库操作方法**}最初为了省事,尽量少声明对象,只在全局声明了一个privateDBOperdb=newDBOp er(),在不同方法里面调用该对象的方法,以避免为其定义而造成内存浪费。
后来代码重构,在编译的时候并未报错。
但是当运行的时候,就出现"NullReferenceException:未将对象引用设置到对象的实例"。
结果就因它而搞了几个小时。
后来根据google的结果,将不同方法中使用到的DBOper对象一一重定义为局部变量(一个方法里面只定义一个DBOper对象,多次调用其方法均正常),去掉全局的private变量。
再运行的时候就正常了。
至于为什么将自定义的对象提成为class为private在不同的方法里面使用后而出现这样的问题,现在还不是很清楚.........................编辑提醒:请注意查看“未将对象引用设置到对象的实例”一文是否有分页内容。
原文地址htt p:///a/201110/20153.html更多相关文章上一篇:sumif函数的使用方法下一篇:汉字的演变过程表注:未将对象引用设置到对象的实例一文由百分网免费提供,来源于网络。
本文著作权归原作者所有,请在转载引用时保留。
否则因《未将对象引用设置到对象的实例》一文引起的法律纠纷请自负,2011-10-21。
System.NullReferenceException:未将对象引用设置到对象的实例,这是一个新鸟,中鸟,老鸟都避不开的错误。
下面基础的解释一下这错误:1:本质上的错误:object a;//a是Null对象protected void Page_Load(object sender, EventArgs e){a.ToString();//调用一个Null对象的方法}当然啦!结果就如下图了:这么赤裸裸的写出这种代码,不太容易,通常更倾向于下面一种:2:通常性的错误:示例1:一个过滤某些字符的函数:public static string FilterValue(string value){string[] filterChar = new string[] { "\'", ",", ">", "<", "=", "; ", "\"", "--" };for (int i = 0; i < filterChar.Length; i++){value = value.Replace(filterChar[i], "");}return value.Trim(' ');}这个函数比如容易看的出:如果value传进来为Null的时候,就等于Null.Replace被调用,就出现了上面的错误。
因此,通常的,在函数的首行,都会对value进行:if(!string.IsNullOrEmpty(value)) 一下。
示例2:再举一下通用性的调用错误,绑定,Eval("字段") ,这个方法比较常见,某些情况要转字符串比较,这里示例一下:<%# Eval("字段").ToString()=="1"?"Yes":"No" %>当Eval("字段")为Null时,一个Null.ToString(),必然也会出现上面的错误,那什么情况出现?1:字段的值为Null2:空数据行,就是你表一行数据都没有,全是Null。
所以预防性的写法是:<%# Convert.ToString(Eval("字段"))=="1"?"Yes":"No" %好了,看到本文的不管懂的还是不懂的,现在都应该懂了,如果你非要说你不懂,我得赞扬你智商高,下面有智商介绍,别放过。
见到这异常:就是一个Null的对象调用了方法(属性或其它成员)变成Null.XXX引发的。
当然啦,出现这种异常的场景,那可是万万千,数也数不完,但本质是一样的。
个人观点认为,在三只鸟中发生此错误的原因各不同,基本如下:新鸟:不知道这个错误,或见这错误的次数太少,所以代码基本防都不防,模仿式,大量的函数都潜伏这种错误杀手。
个人猜测:新鸟写的代码,都不加判断的原因可能:其一:是他们不知这种情况,刚学习,经验不足,未有处理这种异常的经验。
其二:推测是他们高调的认为:多一个Null的判断,会使得性能下降,他们追求高性能,因此,基本上,不加。
中鸟:知道这个错误,只是考虑的不多,心不够细,人不够稳,写代码基本会加,但普遍不加。