2014-02-24 52 views
0

我正在开发使用LongListSelector的Windows Phone应用程序。我有一个**IList**声明它将包含LongListSelector的项目。将对象[]转换为特定类型

public IList SelectedItems = new List<Object>();

SelectedItems将包含如下所示的/选择的项目从选择改变事件的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

看看选择变换..或甚至SelectMany –

+0

@daveL:感谢您的帮助。但不幸的是,选择转换不能应用于IList。 –

+0

它肯定不会......但要使用Select变换扩展,您需要包含System.Linq命名空间 –

回答

3

(你真的是要投的对象吗?或者是你的收藏声明为含object秒,但实际上包含了你所需要的类型?)

如果是前者,那么可能你正在寻找在Enumerable.Cast method,这将任何IEnumerable的元素转换为一个给定的类:

var awaitingJobs = SelectedItems.Cast<AwaitingPickingJobModel>(); 

对于后者,或者如果你的源列表中可能包含多种不同类型,然后OfType方法可能是您的解决方案,并返回一个强烈型收藏:

var awaitingJobs = SelectedItems.OfType<AwaitingPickingJobModel>(); 

(我不知道为什么你已经使用在您发布的代码OfType方法,如在代码中dynamic基本上是多余的。)

+0

谢谢你的回复队友。 我声明的集合是类型对象。但我想将它投射到我自己的对象上。您建议的行 'var awaitingJobs = selectedItemsObject.Cast (); '给出的异常信息如下 '''System.Collections.Generic.List '不包含'Cast'的定义'' '异常来源:“匿名托管的DynamicMethods程序集”\t字符串“ ”同样适用于第二行建议。 '异常消息:''System.Collections.Generic.List '不包含'OfType'的定义'' –

+0

您需要在文件的顶部包含'using System.Linq',并且包含适当的参考(到System.Core.dll)。但是,你也应该删除'dynamic',因为这会引起混淆 - 直接在'SelectedItems'上调用这些方法(我会编辑以澄清这一点)。 –

+0

另外,关于强制转换:您的集合被*声明为类型'object',但是*集合中的项*不是*'对象'。假设他们已经是你的模型类型,你可以使用第二个选项。 –

相关问题