在 Windows 窗体中,我在加载事件中调用一个方法。在那里我用这个填充了一些文本框:
foreach (TabPage page in tabControl_Berichte.TabPages)
{
uc_MusterberichtProzessdetails bla = (uc_MusterberichtProzessdetails)page.Controls[0];
object val = musterbericht.GetType().GetProperty(page.Name + "_Bem").GetValue(musterbericht, null);
bla.tB_Bemerkung.Text = val.ToString();
val = musterbericht.GetType().GetProperty(page.Name + "_Bearb").GetValue(musterbericht, null);
bla.tB_Bearbeiter.Text = val.ToString();
val = musterbericht.GetType().GetProperty(page.Name + "_Datum").GetValue(musterbericht, null);
bla.tB_Datum.Text = val.ToString().Substring(0, 10);
val = musterbericht.GetType().GetProperty(page.Name + "_Erledigt").GetValue(musterbericht, null);
bla.chB_Erledigt.Checked = (bool)val;
val = musterbericht.GetType().GetProperty(page.Name + "_Dauer").GetValue(musterbericht, null);
bla.tB_Dauer.Text = val.ToString();
}
除了 DateTime 的“_Datum”之外,所有属性都是字符串?调用该方法时,将为每个 TabPage 加载数据。
在我的示例中,一个 TabPage 加载正确。在第二个 TabPage 中,日期属性为空。所以在这之后:
val = musterbericht.GetType().GetProperty(page.Name + "_Datum").GetValue(musterbericht, null);
val 为空。
在下一行:
bla.tB_Datum.Text = val.ToString().Substring(0, 10);
我可以在调试过程中看到,当鼠标悬停 ToString() 时,会显示“”(空字符串)。但是,如果我现在单击 F10,我的表单将显示出来。该方法停止。程序运行(以下文本框和选项卡未填充数据)。
没有例外!!我不明白。并且在任何地方都没有尝试捕获。
如果我直接使用设置为 null 的对象尝试此操作,则会引发异常。
那么这里会发生什么?为什么我的程序还在运行??
(现在我在每个 val = ... if val != null 之后进行测试,所以这不是问题。)
编辑:
我刚试过这个:
DateTime? dttest = null;
object objtest = dttest;
string strtest = objtest.ToString();
在这里,我在 ToString() 处遇到异常。
在上面的示例中,我也尝试过
val = musterbericht.GetType().GetProperty(page.Name + "_Datum").GetValue(musterbericht, null);
if (val.ToString().Length > 0)
bla.tB_Datum.Text = val.ToString().Substring(0, 10);
这里的行为与上面几乎相同。在这里,方法停止在if (val.ToString().Length > 0)
并且加载事件被中止。(仍然没有例外)
它看起来val.ToString()
正在工作,但val.ToString().xxxxx
会导致这种奇怪的行为。