首页 > 代码库 > 集合类操作:未将对象引用设置到对象的实例
集合类操作:未将对象引用设置到对象的实例
以List为例,具体错误信息如下:
未处理 System.NullReferenceException Message=未将对象引用设置到对象的实例。 Source=TestSet StackTrace: 在 TestSet.Form1.button1_Click(Object sender, EventArgs e) 位置 E:\WorkSpace\VS2010\TestSet\TestSet\Form1.cs:行号 34 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 TestSet.Program.Main() 位置 E:\WorkSpace\VS2010\TestSet\TestSet\Program.cs:行号 18 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:
先声明一个类如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestSet { public class Test { public Test() { // } private List<TestChild> _TestChilds; /// <summary> /// 子类 /// </summary> public List<TestChild> TestChilds { set { _TestChilds = value; } get { return _TestChilds; } } } }
子类如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestSet { public class TestChild { public TestChild() { } private string _TestChildsId; public string TestChildsId { set; get; } private string _TestChildsName; public string TestChildsName { set; get; } private string _TestChildsCount; public string TestChildsCount { set; get; } } }
在测试Form窗体添加如下代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TestSet { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Test ts = new Test(); for (int i = 0; i < 10; i++) { TestChild tsc = new TestChild(); tsc.TestChildsCount = "10"; tsc.TestChildsId = Guid.NewGuid().ToString(); tsc.TestChildsName = "name"; ts.TestChilds.Add(tsc); } int ss = ts.TestChilds.Count; } } }
小注:这个错误在操作集合类Collection、List时,均会出现,原因是:Test类的属性没有实例化,在添加数据之前给它实例化一下,具体代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestSet { public class Test { public Test() { // } private List<TestChild> _TestChilds; /// <summary> /// 子类 /// </summary> public List<TestChild> TestChilds { //以下代码为修正代码 get { if (_TestChilds == null) { _TestChilds = new List<TestChild>(); } return _TestChilds; } set { _TestChilds = value; } } } }
集合类操作:未将对象引用设置到对象的实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。