此代碼有效。但注意到相似第六& 10日線之間,沒有泛型的運行時類型鑄造
void someThing_Click(object sender, RoutedEventArgs e)
{
President pres;
if (e.GetType() == typeof(MouseButtonEventArgs))
{
pres = (sender as SomeUserControl).DataContext as President;
}
else
{
pres = (sender as MenuItem).DataContext as President;
}
}
是有辦法縮短這樣的代碼,
Type t = (e.GetType() == typeof(MouseButtonEventArgs)) ? SomeUserControl : MenuItem;
pres = (sender as t).DataContext as President;
上面的代碼不工作,只是爲了說明。
僅當您檢查結果時才使用「as」運算符。在其他情況下,你應該使用普通的cast(Type)操作符 - 它具有更好的性能。 – GrzegorzM
「正常」(直接)投射不會更快,它在內部使用[is]和[as]運算符的組合。請看我對@xxMUROxx的評論回答 – Andrew