如何在应用强制转换时避免创建多个对象?

时间:2014-03-19 10:41:46

标签: c# .net

目前我正在使用多个对象,以便从需要多次演员的事件中获取属性。

如果有更好的,可能更短的方法,我很担心。

System.Windows.RoutedEventArgs eventTrack = (System.Windows.RoutedEventArgs)e;
FluidKit.Controls.ElementFlow fluidItem = (FluidKit.Controls.ElementFlow)eventTrack.OriginalSource;
Client.DataModel.Advertisement adv = (Client.DataModel.Advertisement)fluidItem.ClickedItem;

string test = adv.ShopId.ToString();

2 个答案:

答案 0 :(得分:5)

嗯,你无法做很多事 - 你可以试试像

这样的结构
Advertisement adv = ((e as RoutedEventArgs).OriginalSource as ElementFlow).ClickedItem as Advertisement;

但这很难看。在.NET 4中还有dynamic关键字可用的方法:

dynamic eventArgs = e;
dynamic adv = e.OriginalSource.ClickedItem;

但这有影响性能的缺点。

我认为你拥有它的方式(可能没有那些命名空间)是最好的代码可读性,同时保持低性能影响。

答案 1 :(得分:5)

您可以在同一行使用多次投射:

string adv = ((Client.DataModel.Advertisement)(((FluidKit.Controls.ElementFlow)(((System.Windows.RoutedEventArgs)e).OriginalSource)).ClickedItem)).ShopId.ToString();

或者您可以使用dynamic关键字作为Migol提到的