我为盒装的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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想用它来对盒装的RegistryItems的ArrayList进行排序(它确实应该是一个List <RegistryItem>,但这不受我的控制).
ArrayList regItems = new ArrayList();
// fill up the list ...
BoxedRegistryItemComparer comparer = new BoxedRegistryItemComparer();
ArrayList.sort(comparer);
Run Code Online (Sandbox Code Playgroud)
但是,最后一行给出了编译器错误:"无法从BoxedRegistryItemComparer转换为System.Collections.IComparer".如果有人能指出我的错误,我将不胜感激.
BoxedRegistryItemComparer应该实施System.Collections.IComparer使用ArrayList.Sort.你实现了System.Collections.Generic.IComparer<T>哪些不是一回事.
您已经定义了Generic-Comparer(IComparer<T>)而不是没有type(IComparer)的Comparer.ArrayList.Sort()期望非泛型IComparer.
通用类型不能转换为非泛型等价物.