2015-01-21 4 views
-1

내 응용 프로그램에서 모든 사용자를 가져 오도록 요청하고 사용자 개체를 ArrayList에 저장합니다.C# 개체 유형 변경

이제 사용자 Arraylist가 있습니다. 사용자 목록을 반복하고 콤보 상자를 채 웁니다.

 userList = Program.GetALLUsers(); 
     foreach (User user in userList) 
     { 
      cmbUserList.Items.Add(user.displayName); 
     } 
     cmbUserList.SelectedIndex = 0; 

내 다음 함수는 User 객체를 Param으로받는 사용자 세부 정보를 가져 오므로 특정 사용자 객체의 세부 정보를 가져올 수 있습니다.

이제 getUserDetials 단추를 클릭하면 선택한 인덱스가 콤보 상자 (Arraylist의 동일한 인덱스 여야 함)에서 가져와 getUserDetails 함수에 전달됩니다. 이 예제에서 나는 단지 인덱스 1을 하드 코딩했다.

User currentUser = userList[0]; 

그것은 객체 유형을 사용자에게 변환 할 수 없다고 말한다.

Anyideas 어떻게해야합니까?

User currentUser = (User)userList[0]; 

그러나, 당신이 List<User> 대신 ArrayList의를 사용하여 더 나을 것 :

+2

왜 'List '을 사용하지 않습니까? 'ArrayList'가 필요할 때가 오기까지 오랜 시간이 걸렸습니다. –

+0

당신은 다운 캐스트해야합니다. 'ArrayList'에있는 모든 것은'object'로 저장됩니다. (더 이상 사용되지 않는 이유 중 하나입니다.) – BradleyDotNET

+0

'User currentUser = (User) userList [0]'하지만, .NET 2.0 이상을 사용한다면 [목록 '] (https://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) .aspx)을 대신 사용해야합니다. –

답변

1
User currentUser = (User)userList[0]; 

FYI 또한 변수를 사용하는 대신 ((User) userList [0]) ClassMember를 수행 할 수도 있습니다. 나는 그것이 더 낫다는 것을 말하지 않고있다, 나는 선택을 보여주고있다.

ArrayList 대신 List <을 사용하는 것이 좋습니다.

List<User> userList = new List<User>(); 

foreach (User user in response.users) 
{ 
    userlist.Add(user); 
} 

그러면 개체는 이미 사용자로 저장됩니다.

2

것과 간단한 해결책은 명시 적 캐스트를 만드는 것입니다. 그렇게하면 값을 전송할 필요가 없습니다.