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

本文关键字:创建 对象 转换 应用 | 更新日期: 2023-09-27 17:50:52

目前,我正在使用几个对象,以便从需要多次强制转换的事件中获得属性。

我担心是否有更好的,可能更短的方法来做到这一点。

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();

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

嗯,对此你无能为力——你可以尝试像

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

,但这是相当丑陋的。还有一个dynamic关键字的方法在。net 4中可用:

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

,但是这会影响性能。

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

可以在同一行中使用多个类型转换:

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

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