2014-11-24 2 views
-2

Windows Phone 8.1에서 onNavigate 메서드를 사용하고 내가 만든 탐색 개체 목록을 전달하려고합니다. 시도하고 e.parameters (작동하는 것)에서 목록을 검색 할 때 목록을 반복하여 원래 개체 유형으로 다시 캐스트 할 수 없습니다. 하나의 객체 만 보내고 목록은 보내지 않으면 작동합니다.Windows 전화 문제 해결 8.1 컴파일 오류 : GetENumerator

예를 들면.

mainpage의 button_click 이벤트에서 아래 코드를 호출하여 page2로 이동하고 객체 목록을 전달합니다.

다음과 같이 정의 된 클래스가 있습니다. 그때 그때

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

I 아래와 같은 목록을 만들

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"}; 

을 다음과 같이 테스트를 위해

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

    public string Name { get; set; } 

    public string Description { get; set; } 
} 

나는 3 개체를 만들고 목록에 추가 아래 전화 걸기

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

나는 하나의 코드가 작동하는 객체와 컴파일을 전달하고 새 페이지가 너무 성공적으로 탐색하는 경우 * ** 나는 목록을 전달하면 나는 OnNavigatedTo 방법에서 foreach는 반복자에 다음과 같은 오류가 위와 같이

**

string myfiller = ""; 

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

나는 다음과 같은 오류 얻을 * 아래 예제 코드 : 'OBJE foreach 문이 형 때문에'개체 '의 변수에 작동 할 수 없습니다에게 ct '는 GetENumerator에 대한 공용 정의를 포함하지 않습니다.

나는 목록을 NavigationContext 개체로 다시 캐스팅하는 방법을 찾으려고 노력했지만 작동하지 못하게하기 때문에 무언가를하고 있다고 생각합니다.

제안 사항?

+1

당신의 문제는 바로 오류 메시지입니다 :'e.Parameter'는'object'이지만 그것을 반복하고 싶으므로 반복하는 것에 던지십시오. –

+1

정확한 오류 메시지에 대해 Google 검색을 수행하면 'object'에 GetENumerator에 대한 공용 정의가 없으므로 'object'유형의 변수에서 작동 할 수 없습니다. '(https://www.google.com/webhp?sourceid = chrome-instant & ion = 1 & espv = 2 & ie = UTF-8 # q = C % 23 % 20cannot % 20 operate % 20on % 20variables % 20of % 20type % 20 % 27 개체 % 27 % 20 % 20 % 27 개체 % 27 % 20 % 20 % 20contain % 20a % 20public % 20definition % 20for % 20GetENumerator) 더 많은 노력을 보여주고 오류 메시지에 대한 검색을 수행하여 정확히 무엇이 잘못되었는지 알려줍니다. – MethodMan

답변

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 오브젝트는 것을 방지하기 위해 테스트 될 수있는 null 값을 초래할 것이다 as 연산자를 사용하여 정확한 형식으로 (a List<NavigationContext>)를 해석 할 수없는 경우 목록의 요소를 NavigationContext 개체로 사용하려고하면 추가 문제가 발생합니다.

+0

'NULL'은 컴파일되지 않습니다. 그것을 'null'로 만드십시오. 내 의견으로는, 당신의 객체가 아무 것도 없다면 표현하는 것이 낫다. 'if (navigationObjects! = null)' – Silvermind

+0

@ Silvermind 편집 된 대답, 그것을 지적 해 주셔서 감사합니다. 순서는 C#에서 많은 차이를 만들지 않지만 왼쪽에 불변 (immutable)을 두는 것은 실수로 조건문 내에서 과제를 수행 할 가능성을 줄이는 데 도움이됩니다. (C#에서 그렇게 할 수 있는지는 모르겠지만 C에서 너무 자주 발생합니다.) –

+0

감사합니다. 목록으로 개체를 다시 캐스팅하는 방법을 알지 못했습니다. 이제 알았어. – Danny