2011-03-09 31 views
0

这应该很简单。这里是我的一个线的多数民众赞成给我的麻烦代码:点结构拒绝创建

Point tp3 = new Point(0.0, 0.0); 

然而,如果我以后直接破门,然后键入“TP3”到即时窗口,我得到“名‘TP3’中不存在当前的情况。“到底他妈发生了什么?在这个项目中,我的代码比这一行更多,但我不确定可能会影响到它。我在这之后直接打破了界限,并且tp3无处可见。如果我在休息模式下悬停在tp3上,那么我也没有得到任何东西。

有谁知道可能是什么原因造成的?为什么C#不让我创建点?

编辑:我正在使用System.Windows.Point结构,并且当我打算在Debug中时,我发现实际上我在Release模式下运行。当然,这是问题所在,因为tp3正在被垃圾收集。感谢大家的快速和准确的反应!我正要把我的大脑拉出来。是的,我的大脑。

编辑#2:实际上,正如Maupertuis指出的那样(双关语完全意图),因为Point是一个结构,它不会被垃圾回收,相反,编译器甚至没有为它分配空间,因为它没有使用。谢谢Maupertuis!

+0

您是在调试还是发布模式下编译? – Jacob

+0

你在说哪个'Point'? System.Drawing.Point结构甚至不会编译。你在使用调试还是发布版本? 'Point'类或结构体? – CodesInChaos

+0

尝试使用'tp3',然后你会看到它是否真的存在。您正在使用调试器,因此您可以看到调试器想要显示的内容。 –

回答

4

如果tp3不再使用,它​​将被归类为超出范围,并受垃圾收集影响。

尝试在行后添加类似Point tempP = tp3;的东西,那么您应该能够看到它。

+0

Point是一个结构体,tp3生活在堆栈中,而不是在堆中。因此,垃圾收集不适用于它。^_^ – Eilistraee

+0

所以呢,我忘记了。标题“点*对象*拒绝......”的建议的力量使我想起了对象。 – DaveShaw

+0

更改了标题。我非常小心地说“Point struct”,因为我认为人们会认为我正在试图定义一个名为Point的新结构,而不是一个实例(或者任何你称之为的)。在C#底下,结构体是以对象的形式实现的吗?只是好奇。 – JoeCool

1

您正在将浮点参数传递给整数构造函数。

尝试实例化一个的PointF代替:

PointF tp3 = new PointF(0.0f, 0.0f); 

更妙的是,因为的PointF是结构,只需使用:

PointF tp3 = PointF.Empty; 
+0

我希望更多的人会使用空对象。它更清晰,更有表现力。 –

2

如果优化代码复选框在项目属性检查,它基本上将在上次使用后将本地对象设置为null,以便可以进行垃圾回收。另外,如果变量没有在任何地方使用,它将不会被分配。

不直接依赖于调试或发布模式,但调试模式默认为未选中(未优化)和发布默认为已选中。