繁体   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