2010-06-25 4 views
0

거품 형 정렬을위한 대리자 솔루션을 구현하려고합니다. 나는이 오류 얻을일반 대리인 및 IList <T>

static void bubble_sort(int[] array) {} 

:

public delegate void SortHandler<T>(IList<T> t); 

public static void Sort<T>(IList<T> arr, SortHandler<T> func) 
{ 
func(arr); 
} 

int[] arr2 = { 10,1,2,3,4 }; 
CollectionHelper.Sort<int>(arr2, bubble_sort); 

버블 정렬 함수 서명은 :이 코드가

인수를 '2': DelegatesAndGenerics '에'방법 그룹 '에서 변환 할 수 없습니다. SortHandler

답변

3

예 - bubble_sort 메서드는 int[]이 매개 변수로 필요하지만 SortHandlerIList<T> 만 지정합니다. bubble_sort에서 SortHandler<int>을 만들 수 없습니다.

int[]을 정렬한다고해서 CollectionHelper.SortList<int> 대신 (예 :) 배열로 대리인을 호출한다는 것을 의미하지는 않습니다.

public void Sort<T>(T[] array, SortHandler<T> handler) 
{ 
    List<T> list = new List<T>(array); 
    handler(list); 
} 

어떻게 당신이 당신의 핸들러로 bubble_sort 방법을 전달하기 위해 관리하려는 경우 그 대처하기 위해 기대 :

예를 들어,이 구현을 고려?

가장 간단한 해결 방법은 bubble_sort 메서드를 대신 IList<int> 수락하도록 변경하는 것입니다.

(다소 이상한 상황입니다. 일반적으로 일반 정렬 방법에 전달하는 핸들러의 종류는 두 가지 요소를 비교하는 것이므로 실제 정렬 자체는 수행하지 않습니다.)

-1

나는이 문제가 귀하의 int[]이 IList가 아니라고 생각합니다. 당신이 그렇게처럼 SortHandler 대리자를 변경하는 경우 :

public delegate void SortHandler<T>(IEnumerable<T> t); 

당신은 배열,리스트를 사용할 수 있어야합니다, 또는 당신이 원하는대로.

+0

int []가 제네릭 인터페이스 IList 을 구현하지 않습니까? –

+1

정확히 똑같은 문제가 있습니다. 'int []'*는'IList '을 구현하지만, 어떤 *'IList '을 가져올 델리게이트를위한 * int * 만 받아들이는 메소드를 사용할 수는 없습니다 . –

+0

귀하의 권리, 귀하의 권리. 주의를 기울이지 말라고 가르쳐주세요. 나 자신을 다운 투표 할 수 있습니까? – ckramer