我正在开发一个使用LongListSelector
的Windows手机应用程序。我声明了**IList**
,其中包含LongListSelector的项目。
public IList SelectedItems = new List<Object>();
SelectedItems
将包含在Selection changed事件中从LongListSelector的UI中选择/删除的项目,如下所示。
SelectedItems.Add(e.AddedItems);
SelectedItems.Remove(e.AddedItems);
我想将SelectedItems投射到我的特定模型,我目前正在执行以下操作。
AwaitingJobs
是我的模特列表。
List<AwaitingPickingJobModel> AwaitingJobs = new List<AwaitingPickingJobModel>();
dynamic selectedItemsObject = SelectedItems.OfType<Object>().ToList();
foreach (var items in selectedItemsObject )
{
foreach (var item in items)
{
AwaitingPickingJobModel awaitingModel= item;
AwaitingJobs.Add(awaitingModel);
}
}
有没有办法可以使用linq或其他任何方式以更有效/更好的方式完成上述逻辑?
答案 0 :(得分:3)
(你真的是说你想要转换对象吗?或者你的集合被声明为包含object
但实际上包含你需要的类型?)
如果是前者,那么可能您正在寻找Enumerable.Cast
method,它会将任何IEnumerable
的元素转换为给定的类:
var awaitingJobs = SelectedItems.Cast<AwaitingPickingJobModel>();
对于后者,或者如果您的源列表可能包含多个不同类型,那么OfType
方法可能是您的解决方案,并返回强类型集合:
var awaitingJobs = SelectedItems.OfType<AwaitingPickingJobModel>();
(我不确定您在发布的代码中使用OfType
方法的原因,因为代码中的dynamic
基本上是多余的。)