在一個windows窗體中,我在load事件中調用一個方法。在那裏,我填補一些文本框與此:爲什麼這段代碼無異常工作
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();
}
所有屬性除「_Datum」,這是一個DateTime的字符串? 當調用該方法時,將爲每個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 = ...如果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
會引起這種奇怪的行爲。
'Nullable'overrode'ToString'不在'null'上引發異常。 –
出於好奇,所有的反思是什麼? 「TabPage」對象的每個實例是否有不同的屬性名稱集合?這當然是非常規的。 – nicholas
@newStackExchangeInstance,如你所說,'DateTime?'又名'可空 .ToString()'返回一個空字符串,而不是拋出異常。這是問題的答案,爲什麼不把它作爲答案? –
nicholas