NullReferenceException未处理。 C#反思

时间:2010-10-27 17:45:36

标签: c#

ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1";
System.Reflection.Assembly asm;
asm = typeof(Form).Assembly;
ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(ControlType);
ControlObject.Name = ControlName;

为我生成以下异常的下一个代码:

ControlObject.Name = ControlName;

NullReferenceException是unhandle 对象引用未设置为对象的实例。

5 个答案:

答案 0 :(得分:4)

Assembly.CreateInstance期待一个类型名称,您似乎在传递一个类型实例的名称(即名为PictureBox的{​​{1}}。)。因此,PictureBox1ControlObject,因此null会抛出ControlObject.Name

目前尚不清楚你要做什么,但这就是你遇到问题的原因。如果您正在尝试创建NullReferenceException的新实例,我不明白为什么您不只是说PictureBox;这个类有一个公共无参数构造函数。或者,如果你坚持反思,你可以说

new PictureBox()

如果我们知道你要做什么,我们可以提供更多帮助,而不仅仅是抛出对我们无效的代码并期望我们解决世界饥饿问题。

此外,

controlType = PictureBox1.GetType();
controlObject = Activator.CreateInstance<Control>(controlType);
  1. 请将此变量重命名为ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1"; 。您应该使用camel case作为变量名称。

  2. 为什么您的应用程序类controlType存在于系统命名空间WindowsFormsApplication1中?不要这样做。

答案 1 :(得分:1)

你可能正在尝试写

ControlObject = new PictureBox();

答案 2 :(得分:0)

看起来CreateInstance返回null,这意味着在程序集中找不到该类型。 PictureBox1是一个类型还是一个对象?

答案 3 :(得分:0)

你的应用程序不在 System.Windows.Forms 命名空间

"System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1"

尝试:

ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(typeof(PictureBox));

或只是

ControlObject = new PictureBox();

创建一个新的控件实例。

或许您想在表单上找到现有的PictureBox控件?

答案 4 :(得分:0)

这意味着asm.CreateInstance(ControlType);返回null。

因此,ControlType的值不正确。它应该作为参数接收类型http://msdn.microsoft.com/en-us/library/dex1ss7c.aspx,并且您似乎正在发送实例PictureBox1

应为ControlType = "System.Windows.Forms.PictureBox";