확장 메서드 OrderBy 및 ThenBy를 사용하여 여러 필드에서 내 사용자 지정 컬렉션을 정렬합니다. 이 정렬은 컬렉션에 영향을주지 않지만 대신 IEnumberable을 반환합니다. 내 사용자 지정 컬렉션에 IEnumerable 결과를 캐스팅 할 수 없습니다. 어쨌든 내 컬렉션의 순서를 변경하거나 IEnumerable 결과를 내 사용자 지정 컬렉션으로 변환 할 수 있습니까?IEnumerable을 C#의 사용자 정의 유형으로 변환하려면 어떻게해야합니까?
답변
컬렉션 유형이 IList<T>
를 구현하는 경우 (그것에 Add()
할 수있는) 당신이 확장 방법을 쓸 수있다 :
public static Extensions
{
public static TColl ToTypedCollection<TColl, T>(this IEnumerable ien)
where TColl : IList<T>, new()
{
TColl collection = new TColl();
foreach (var item in ien)
{
collection.Add((T) item);
}
return collection;
}
}
아니요. 쿼리 연산자를 사용하면 원본 컬렉션의 인스턴스를 사용하여 열거 형을 생성하지 않습니다. 오히려,이 기능을 제공하기 위해 개인 구현 (아마도 익명, 가능하지 않을 수도 있음)을 사용합니다.
원본 컬렉션에 원한다면 유형에 따라 IEnumerable<T>
(또는 특정 경우 콜렉션에 저장되어있는 것)을 취하는 생성자가 있어야하며 생성자에 쿼리를 전달해야합니다.
그러면 IEnumerable<T>
에 대한 To<YourCollectionType>
이라는 확장 메서드를 만들 수 있습니다.이 메서드는 IEnumerable<T>
이되고 형식의 생성자로 전달한 다음이를 반환합니다.
아니요. ToList 및 ToDictionary 확장 메서드로 설정된 패턴을 따를 수 있습니다. 비슷한 확장 메서드를 작성하여 IEnumerable에서 사용자 고유의 컬렉션 형식을로드합니다.
사용자 지정 수집을 정렬 할 수 있도록 IComparer의 고유 한 인스턴스를 작성할 수 있습니다.
당신은 IEnumerable을 반복 할 수 있고 각 항목을 사용자 지정 컬렉션의 새 인스턴스로 다시 덤프 할 수 있습니다.
당신은 IEnumerable을 가진 목록을 초기화 할 수 있습니다 : 유형의는 IEnumerable입니다
하면 항목,이 같은 목록을 만들 수 있습니다
var list = new List<string>(items);
또는 당신은 단순히 items.ToList 를 호출 할 수 있습니다 () :
var list = items.ToList();
사용자 정의 컬렉션은 어떤 인터페이스를 구현합니까?
의 경우 IList의이 다음은이 IDictionary 다음 당신은 IEnumerable을 기타에 .ToDictionary()를 할 수있을 것입니다 경우는 IEnumerable 에 .ToList()를 할 수있을 것입니다 ..
을 사용하면보다 효과적으로 사용할 수 있습니다.
비슷한 것이 없으면 .ToMyCollection()에 IEnumerable의 확장 메서드를 작성할 수 있습니다.
열거 형 및 컬렉션은 매우 다른 짐승입니다.
열거 형은 컬렉션에 인덱스 기반 접근 자, Count 속성 등이있는 동안에 만 열거 할 수 있습니다. 컬렉션을 만들려면 실제로 IEnumerable을 열거해야합니다. List 과 같은 일반적인 컬렉션에는 IEnumerable을 허용하는 생성자가 있습니다. 그럼에도 불구하고 열거가 수행됩니다.
System.Linq.열거 클래스 당신은이 방법을 수행하여 사용자 지정 컬렉션을 변환하는 사용자 정의 확장 메서드를 만들 수
var myEnumerable = this.GetEnumerator();
var array = myEnumerable.ToArray();
var list myEnumerable.ToList();
당신이 중 하나를 배열에 당신을 IEnumerable 형식을 변환 할 aloow이 될 몇 가지 확장 방법, ToList이있다
이 같은 소스 - 컬렉션은 불변 취급하기 때문에public static CustomCollection<TSource> ToCustomCollection<TSource>(this IEnumerable<TSource> source);
LINQ 멋진 - 그것은을 수정하지 않습니다. 확장 메서드를 사용하면 지정한 대체 순서로 열거됩니다.이 방법으로 새 사용자 지정 목록을 작성하지는 않습니다.
나는 두 가지 제안 : 당신이
- 을 base)를 사용하여 내부에서 정렬 할 수 있습니다.
은 당신이 정말로 전혀 지정 컬렉션의 종류가 필요하십니까를? 그것은 당신이이 기존의 일반적인 수집 유형에 의해 제공됩니다로 할 수있는 모든 것을 같은 소리, 어쩌면 당신은 그들을 위해 확장 방법 또는에 추가해야합니다.
- 1. AS3, 사용자 정의 유형으로 SWF로드.
- 2. nHibernate를 사용자 정의 유형으로 매핑
- 3. 파이썬 튜플 문자열을 동적으로 지정된 유형으로 변환하려면 어떻게해야합니까?
- 4. Objective-C의 사용자 정의 UIButton
- 5. Google지도에서 사용자 정의 오버레이를 투영 계정으로 변환하려면 어떻게해야합니까?
- 6. Ruby를 사용하여 모든 배열 값을 주어진 유형으로 변환하려면 어떻게해야합니까?
- 7. 문자열에서 사용자 정의 유형으로 유형 변환
- 8. 문자열을 사용자 정의 유형으로 변환. 입출력 문제
- 9. postgresql에서 사용자 정의 유형으로 캐스팅하는 방법
- 10. python3에서 PyBytesObject 유형을 PyUnicodeObject 유형으로 변환하려면
- 11. 사용자 정의 IEnumerable을 사용하는 로컬 RDLC 보고서 파일 <>
- 12. eps를 jpg로 변환하려면 어떻게해야합니까?
- 13. NSDecimalNumber를 NSInteger로 변환하려면 어떻게해야합니까?
- 14. DIB를 BMP로 변환하려면 어떻게해야합니까?
- 15. IntPtr을 스트림으로 변환하려면 어떻게해야합니까?
- 16. JSONArray를 JSONObject로 변환하려면 어떻게해야합니까?
- 17. HTML을 Textile로 변환하려면 어떻게해야합니까?
- 18. wostream을 ostream으로 변환하려면 어떻게해야합니까?
- 19. HTML을 XPS로 변환하려면 어떻게해야합니까?
- 20. * char를 _TCHAR로 변환하려면 어떻게해야합니까?
- 21. NSString을 NSData로 변환하려면 어떻게해야합니까?
- 22. 목록을 배열로 변환하려면 어떻게해야합니까?
- 23. MVC 3으로 변환하려면 어떻게해야합니까?
- 24. 오디오를 텍스트로 변환하려면 어떻게해야합니까?
- 25. 파이썬을 사용하여 U + 0043을 C로 변환하려면 어떻게해야합니까?
- 26. PostgreSQL DB의 타임 스탬프를 사용자 시간대 시간으로 변환하려면 어떻게해야합니까?
- 27. 사용자 정의 컨트롤을 얻으려면 어떻게해야합니까?
- 28. PDF 파일을 이미지로 변환하려면 어떻게해야합니까?
- 29. Java에서 사용자 정의 예외를 사용자 정의하려면 어떻게해야합니까?
- 30. JEditable 사용자 정의 유형으로 인해 편집이 비어 있습니다.
우수, 감사합니다! –
이 아이디어는 완전히 나를 도왔습니다. 감사! – jeremcc
의 재미, 나는 같은 질문을했다 같은 대답과 함께 온, 그리고 임은 아직도 그것을 할 수있는 더 좋은 방법이 있는지 둘러보고 ... – Nevyn