簡體   English   中英

沒有泛型的運行時類型轉換

[英]Runtime Type casting without generics

此代碼有效。 但是注意到第 6 行和第 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;

上面的代碼不起作用,僅用於說明。

我認為不需要檢查事件參數的類型等等,這應該就足夠了

President pres = ((FrameworkElement)sender).DataContext as President;

DataContext 屬性屬於FrameworkElement類,即您的SomeUserControlMenuItem繼承自FrameworkElement 因此,您可以直接將其類型轉換為FrameworkElement

pres = ((FrameworkElement)sender).DataContext as President;

直接使用FrameworkElement DataContext

var fe = sender as FrameworkElement
if(fe != null)
{
    President pres = fe.DataContext as President;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM