Google에서 너무 쉽게 질문하는 것처럼 느껴집니다. 내 자신의 버전을 구현하려고 할 때 세부 사항에 빠지기를 바랍니다. 내가 뭘하려는 건 내 데이터 유형 개체에 따라 다른 검색 기능을 사용해야 MyClass 개체 목록을 정렬하는 것입니다.IComparer <>를 위임 함수와 함께 사용하여 검색
나는 클래스 데이터 유형에 대한 마음에서이 같은 했어 :
class Datatype {
public delegate int CMPFN(object x, object y);
private CMPFN compareFunction;
(...)
private XsdDatatype((...), CMPFN compareFunction) {
(...)
this.compareFunction = compareFunction;
}
public CMPFN GetCompareFunction() {
return this.compareFunction;
}
static private int SortStrings(object a, object b) {
return ((MyClass)a).GetValue().CompareTo(((MyClass)b).GetValue());
}
}
을 그리고 나중에 나는이 같은 MyClass에 목록 뭔가 정렬하려고 해요 :
List<MyClass> elements = GetElements();
Datatype datatype = new Datatype((...), Datatype.SortStrings);
elements.Sort(datatype.GetCompareFunction()); // <-- Compile error!
나 '를 Datatype.SortStrings에서 캐스트에 지나치게 흥분하지는 않지만이 방법이 효과가 있다고 느낍니다 (?). 그러나 컴파일러는 동의하지 않으며 위의 마지막 줄에서이 오류를 발생시키고 CMPFN을 IComparer로 변환/캐스팅 (?) 할 수없는 이유를 정확히 알지 못합니다.
Cannot convert type 'proj.Datatype.CMPFN' to 'System.Collections.Generic.IComparer<proj.MyClass>'
을 ... 확실히 당신이하지''IComparer'을 new' 수 있습니까? –
@ 리차드 : 나쁘다. 나는 위임 된 땅에서 머리를 터뜨 렸습니다. 편집 할 것입니다. 분명히 너무 이른 것 같습니다 :) –
[컴파일러가 사과했는지] (http://meta.stackexchange.com/questions/9134/jon-skeet-facts), 궁금합니다. –