2012-09-17 4 views
2

C#에서의 ArrayList에 인덱스 객체의 메소드를 호출하려고하고 내가 Unit 객체의 ArrayList(unitArray)이 프로그램을 쓰고 있어요와의 non-static 메소드를 호출하는 것을 시도하고있다 ArrayList에서 참조 된 개체입니다. 특정 개체에 액세스하려고 시도하고 메서드 호출하지만 작동하지 않습니다. 이 문제를 해결하는 데 도움을 주셔서 감사드립니다.내가 C 번호에 새로운 해요

'object' does not contain a definition for 'DisplayUnitAttributes' and no extension method 'DisplayUnitAttributes' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) 
+0

이미 다른 대답을 가지고 있지만, 당신의'ArrayList'의 모든 요소가 하나의 동일한 유형의 경우에는이 같이 당신이, cdiggins에 의해 그쪽으로 대답을 염려해서는 안 것 같아요 그런 다음 더 일반적인'ArrayList'에서 감지합니다. – horgh

답변

5

당신은 그것의 유형으로 개체를 캐스팅해야합니다

Unit.unitArray[selectedUnit].DisplayUnitAttributes() 

나는 다음과 같은 예외를 얻을. 아래 MyClass의 대신에

(Unit.unitArray[selectedUnit] as MyClass).DisplayUnitAttributes() 
+0

Word. 내 남자! 무리 감사. 이 캐스트가 ArrayLists와 함께 특별한 것입니까? 나는 이것이 다른 유형의 객체를 포함 할 수 있기 때문에 이것이 아닌가 의심 스럽다. – user1676520

+0

또는 ((MyClass) Unit.unitArray [selectedUnit]) DisplayUnitAttributes()와 같이 캐스트 할 수 있습니다. DisplayUnitAttributes()는 null 개체 참조에서 throw되는 제네릭 예외 대신 개체가 잘못된 형식 인 경우 잘못된 캐스트 예외를 throw합니다. –

+0

@ user1676520 : 올바른, arraylist 개체를 저장합니다. 그래서 당신이 당신이 개체에서 그것을 캐스팅해야 검색 할 수 있습니다. –

3

. ArrayList에서 추출 요소의 형태를 실제 클래스 타입 대체 C 번호의 모든 객체의 기본 클래스는 System.Object이다.

메서드에 액세스하려면 더 이상 파생 형식으로 요소를 캐스팅해야하며 System.Generic.List<T>을 사용하는 것이 더 좋습니다. 여기서 T는 목록에있는 요소의 형식입니다.

1

Enumerable.OfType Method을 사용하여 필요한 부분 배열을 가져올 수 있습니다. 이런 식으로 뭔가 :

foreach (YourClass obj in Unit.unitArray.OfType<YourClass>()) 
    obj.DisplayUnitAttributes(); 
+0

나는 이것을 좋아한다. 전에는 사용하지 마십시오. –

+0

@Valamas 너무 좋아합니다. 이것을 사용하여 "공통 유형의"콜렉션을 필터링하는 것이 매우 유용합니다. 반대로, 나는 거의 Enumerable.Cast 메서드를 사용하지 마십시오. – horgh

관련 문제