我为装箱的RegistryItem对象定义了以下IComparer:
public class BoxedRegistryItemComparer : IComparer<object>
{
public int Compare(object left, object right)
{
RegistryItem leftReg = (RegistryItem)left;
RegistryItem rightReg = (RegistryItem)right;
return string.Compare(leftReg.Name, rightReg.Name);
}
}我想用它对已装箱的RegistryItems的ArrayList进行排序(它实际上应该是一个列表<RegistryItem>,但这不在我的控制范围之内)。
ArrayList regItems = new ArrayList();
// fill up the list ...
BoxedRegistryItemComparer comparer = new BoxedRegistryItemComparer();
ArrayList.sort(comparer);但是,最后一行给出了编译器错误:“无法从BoxedRegistryItemComparer转换为System.Collections.IComparer”。如果有人能指出我的错误,我将不胜感激。
发布于 2009-09-28 14:04:52
BoxedRegistryItemComparer应该实现与ArrayList.Sort一起使用的System.Collections.IComparer。你实现了System.Collections.Generic.IComparer<T>,这不是一回事。
发布于 2009-09-28 14:00:27
您定义的是Generic-Comparer (IComparer)而不是Comparer without a type (IComparer)。ArrayList.Sort()需要一个非泛型IComparer。
泛型类型不能转换为它们的非泛型等效项。
发布于 2010-12-21 14:14:52
如果您遇到无法控制比较器或分类器的情况,这里有两个可以在这两种类型之间进行转换的迷你类(未经测试):
private class GenericComparer<T> : IComparer<T>
{
IComparer _Comparer;
public GenericComparer(IComparer comparer)
{
_Comparer = comparer;
}
public int Compare(T a, T b)
{
return _Comparer.Compare(a, b);
}
}
private class NonGenericComparer<T> : IComparer
{
IComparer<T> _Comparer;
public NonGenericComparer(IComparer<T> comparer)
{
_Comparer = comparer;
}
public int Compare(object a, object b)
{
return _Comparer.Compare((T)a, (T)b);
}
}https://stackoverflow.com/questions/1487193
复制相似问题