2014-02-24 55 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',但是*集合中的項*不是*'對象'。假設他們已經是你的模型類型,你可以使用第二個選項。 –

相關問題