我有以下Winforms层次结构。
Form ==> AForm ==> BForm
int? X;
中定义了无效成员AForm
。在BForm
中,有以下代码。
public partial class BForm : AForm, IBview
{
......
public int Y
{
get
{
int z = X ?? 0;
System.Diagnostics.Debug.WriteLine("X: " + X.ToString() + " z: " + z.ToString());
return z;
}
}
X
不应为null。我正在尝试关闭并打开表单BForm
。它通常有效,偶尔z
为零(可能每10次一次)。我在z==0
行有一个return z
的条件中断。
当破发点被击中时。调试写
X: z: 0
但是,在点击中断后,当我将鼠标光标悬停在visual studio中的X
上时,X
的值既不为null也不为0。
答案 0 :(得分:0)
如果X
可以为空(即int? X
- 那么,它的值是通过X.Value
获得的。您还可以查看:
int z = X.HasValue ? X.Value : 0;
或者,您可以投射X
- (int)X
- 但您要先检查是否X.HasValue
。否则,我相信如果X尚未初始化,你将得到一个null异常。
答案 1 :(得分:0)
检查BForm本身的初始化。仅仅因为BForm从AForm继承了值,这并不意味着这些值保存来自其他AForm对象实例的物理值除非您自己设置这些值。
它与如何创建BForm实例有关。像这样:
AForm A = new Aform(someValueForX);
BForm B = A;
OR
BForm B = new AForm(someValueForX);
在这些情况下,B.X将具有与A.X相同的值,并且对于继承规则,应允许赋值。但是如果X没有在声明中的某个地方初始化,那么X对于你正在查看的BForm的特定实例没有任何价值,即使它在某些其他AForm实例中可能有值。