2014-11-24 92 views
-2

我在Windows Phone 8.1中使用onNavigate方法,試圖傳遞我創建的導航對象列表。當我嘗試從e.parameters中檢索列表(似乎工作)時,我無法遍歷列表並將它們轉換回原始對象類型。它工作,如果我發送一個單一的對象,但不是一個列表。解決Windows Phone 8.1編譯錯誤:GetEnumerator

例如。

從主頁上的button_click事件我調用下面的代碼導航到page2並傳遞一個對象列表。

我有一個類定義如下。

class NavigationContext 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

    public string Description { get; set; } 
} 

爲了測試我創建了3個對象,並將其添加到列表如下

NavigationContext navobj = new NavigationContext(){ID = 77,Name = "DN", Description = "TD1"}; 

    NavigationContext navobj2 = new NavigationContext(){ID = 22,Name = "JN",Description = "JD1"}; 

    NavigationContext navobj3 = new NavigationContext(){ID = 22,Name = "CN",Description = "CN1"}; 

然後我創建列表如下

List<NavigationContext> navlist = new List<NavigationContext>(){navobj,navobj2,navobj3}; 

然後我撥打電話

Frame.Navigate(typeof(Page2), navlist); 

如果我通過一個對象的代碼工作,並編譯和新的頁面導航也成功地* **如果我通過列表如上面我得到的方法的OnNavigatedTo在foreach迭代器下面的錯誤

**示例代碼下面*

string myfiller = ""; 

foreach (NavigationContext navobj in e.Parameter) 
{ 
myfiller += navobj.ID.ToString() + " " + navobj.Name + " " + navobj.Description+ "\n"; 
} 

我得到以下錯誤: foreach語句無法在類型 '對象',因爲變量操作「OBJE ct'不包含GetENumerator的公共定義。

我試圖找到方法將列表轉換回NavigationContext對象,但我認爲我做了一些愚蠢的事情,因爲我無法讓它工作。

有什麼建議嗎?

+1

你的問題是正確的錯誤消息:'e.Parameter'是一個'對象',但你想迭代它,所以把它轉換爲迭代的東西。 – 2014-11-24 17:50:16

+1

對確切的錯誤信息進行谷歌搜索會得到以下結果[無法對'對象'類型的變量進行操作,因爲'對象'不包含GetEnumerator的公共定義](https://www.google.com/webhp?的SourceID =鉻瞬間&離子= 1&espv = 2&即= UTF-8#Q = C%23%20cannot%20operate%20on%20variables%20of%20type%20%27object%27%20because%20%27object%27%20does%20not% 20contain%20a%20public%20definition%20for%20GetENumerator)顯示更多的努力,並在錯誤信息上進行搜索它會告訴你到底發生了什麼錯誤 – MethodMan 2014-11-24 17:52:22

回答

0

嘗試這種情況:

List<NavigationContext> navigationObjects = e.Parameter as List<NavigationContext>; 
if(null != navigationObjects) 
{ 
    foreach (NavigationContext navobj in navigationObjects) 
    { 
     myfiller += navobj.ID.ToString() + " " + navobj.Name + " " + navobj.Description+ "\n"; 
    } 
} 

注意,如果e.Parameter對象不能然後使用as操作者將導致可被測試以防止null值被解釋爲正確的類型(一個List<NavigationContext>)當您嘗試使用列表中的元素作爲NavigationContext對象時,會出現更多問題。

+0

NULL不會編譯。使它爲空。在我看來,最好是表達你的對象是否等於什麼,如果什麼都不等於你的對象,因爲這聽起來更合乎邏輯。 'if(navigationObjects!= null)' – Silvermind 2014-11-24 18:00:52

+0

@Silvermind編輯答案,謝謝指出。這個命令在C#中沒有太大的區別,但是在左邊放置一個不變的字符有助於減少在條件語句中偶然執行賦值的可能性。 (我不知道你是否可以在C#中做到這一點,但它在C中經常發生) – 2014-11-24 18:04:48

+0

謝謝。我不知道如何將列表轉換回對象。現在我明白了。 – Danny 2014-11-24 18:06:29