문제

다르게 말하면:

유형이 안전한 컬렉션(HashTable 대 HashTable) 대신 느슨한 유형의 컬렉션을 선택해야 하는 타당한 이유가 있습니까?사전)?여전히 호환성을 위해서만 존재합니까?

내가 아는 한, 일반 컬렉션은 형식이 안전할 뿐만 아니라 성능도 더 좋습니다.


다음은 주제에 대한 포괄적인 기사입니다. C# 2.0을 사용한 데이터 구조의 광범위한 조사.

도움이 되었습니까?

해결책

제네릭이 아닌 컬렉션은 너무 오래되어 Silverlight 및 Live Mesh에 사용되는 CoreCLR에서 제거되었습니다.

다른 팁

COM 가시성에도 문제가 있습니다. COM interop은 제네릭과 함께 사용할 수 없습니다.

앞으로는 일반 컬렉션만 사용해야 합니다.컬렉션에 있는 유형의 boxing/unboxing을 방지하는 이점도 있습니다.이는 특히 컬렉션에 저장될 때 System.Object로 변환되는 값 형식 컬렉션이 있어서 호출 스택 대신 힙에 값을 저장하는 경우에는 비효율적입니다.

이기종 컬렉션을 저장하기 위해 제네릭이 아닌 컬렉션을 사용하는 경우 항상 List<object>를 사용하여 동일한 작업을 수행할 수 있습니다.이러한 이유만으로도 다시는 일반이 아닌 컬렉션을 만질 이유가 거의 없다고 말하고 싶습니다.

이에 대한 예외는 다른 언어로 작성된 시스템이나 이전 버전의 .NET 프레임워크와의 호환성을 유지하는 것입니다. 그러나 그것은 꽤 "초조한" 경우입니다.

컬렉션의 XAML 직렬화는 IList 또는 IDictionary 구현에 의존하므로 제네릭이 아닌 컬렉션은 앞으로도 한동안 계속될 것입니다.

나는 그것이 더 이상 사용되지 않거나 곧 제거될 것이라고 성급히 말하지 않을 것입니다.특별한 이유가 없는 한 제네릭이 아닌 컬렉션을 사용하지 말아야 한다는 것은 사실입니다. ~ 아니다 일반 버전을 사용하지 마세요.ArrayList와 같은 비일반 컬렉션을 지원하는 수천 줄의 레거시(그렇지 않은 레거시) 코드가 여전히 떠돌고 있습니다(그리고 수년 동안 지속될 것입니다).이것들은 오직 .NET 1.0 및 1.1의 컬렉션이므로 일년 내내 널리 사용(및 남용)되었습니다.

나는 여전히 때때로 IList 개체를 반환하는 .NET 1.1로 작성된 이전 O/R 매퍼와 상호 작용해야 합니다.일반 List<>로 변환하는 방법이 있는데 이는 효율적이지 않지만 실제로는 그렇습니다.

그리고 동일한 배열에 다른 개체를 저장해야 하는 경우(이상하지만 가능함) ~ 할 것이다 제네릭이 아닌 컬렉션이 필요합니다.Boxing과 Unboxing의 대가는 어쨌든 지불해야 할 것입니다.

꼭 필요하다고 생각되면 사용하는 것을 두려워하지 마세요.

알 수 없는 유형의 객체나 여러 가지 유형의 객체를 저장해야 하는 경우가 있을 수 있지만 저장하려는 객체의 유형을 실제로 알고 있다면 일반 버전을 사용하지 않을 이유가 없습니다.

편집하다:댓글을 달았듯이 그냥 사용해도 됩니다. List<Object> - 윽!

예, 제가 아는 한 기존 제품과의 호환성을 위해서만 존재합니다.항상 유형이 안전한 버전을 사용해야 합니다(예:System.Collections 대신 System.Collections.Generic을 사용하세요.

http://msdn.microsoft.com/en-us/library/ms379564.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top