문제
나는 Jon On 의이 대답을 보았다 알 수없는 유형으로 일반 객체를 초기화합니다:
그러나 단일 컬렉션에 여러 개의 관련이없는 값이 포함되도록하려면 사용해야합니다.
List<object>
나는 비교하지 않는다 ArrayList
vs List<>
, 하지만 ArrayList
vs List<object>
, 둘 다 유형의 요소를 노출 할 것입니다 object
. 이 경우 두 가지를 사용하면 어떤 이점이 있습니까?
편집 : 두 수업 모두 노출되기 때문에 유형 안전에 대한 관심이 없습니다. object
항목으로. 하나는 여전히 캐스팅해야합니다 object
원하는 유형으로. 나는 유형 안전 이외의 다른 것에 더 관심이 있습니다.
편집 : 답변 해 주신 Marc Gravell과 Sean에게 감사드립니다. 죄송합니다. 답변으로 1을 선택할 수 있으므로 둘 다 투표 할 것입니다.
해결책
LINQ 확장 메소드를 직접 사용할 수 있습니다. List<object>
, 그러나 그렇지는 않습니다 ArrayList
, 당신이 a를 주입하지 않는 한 Cast<object>()
/ OfType<object>
(감사합니다 IEnumerable<object>
vs IEnumerable
). 유형 안전이 필요하지 않더라도 그만한 가치가 있습니다.
속도는 거의 동일합니다. 스트러크는 여전히 박스형 등이 있으므로 구별 할 것이 많지 않습니다. 내가 보는 경향이 있다는 점을 제외하고 ArrayList
"죄송합니다. 누군가가 레거시 코드를 다시 쓰고 있습니다 ..."; -P
다른 팁
사용하면 큰 이점 중 하나입니다 List<object>
요즘 대부분의 코드는 일반 클래스/인터페이스를 사용하도록 작성되었습니다. 요즘 대부분의 사람들은 IList<object>
대신 IList
. 부터 ArrayList
구현하지 않습니다 IList<object>
이 시나리오에서 배열 목록을 사용할 수 없습니다.
비 게 니체 클래스/인터페이스를 레거시 코드로 생각하고 가능할 때마다 피하는 경향이 있습니다.
이 경우 ArrayList
vs. List<Object>
그러면 속도의 차이를 알지 못할 것입니다. 이들 각각, 특히 .NET 3.5 및 확장 방법을 계산하는 실제 방법에는 약간의 차이가있을 수 있지만 ArrayList가 다른 어떤 것보다 다소 감가 상각되는 것과 더 관련이 있습니다.
예, TypeSafe 외에도 일반 컬렉션이 실제로 더 빠를 수 있습니다.
MSDN에서 (http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx)
그만큼 System.collections.generic네임 스페이스에는 일반 컬렉션을 정의하는 인터페이스 및 클래스가 포함되어있어 사용자가 비 게니어 강력하게 입력 된 컬렉션보다 더 나은 유형 안전 및 성능을 제공하는 강력하게 입력 된 컬렉션을 만들 수 있습니다.
벤치마킹을하면 가장 잘 수행되는 것이 무엇인지 알 수 있습니다. 나는 그 차이가 매우 작다는 것을 손님했다.
List <>은 ArrayList의 TypeSafe 버전입니다. 컬렉션에서 동일한 객체 유형을 얻을 수 있습니다.