【发布时间】:2014-12-27 03:35:38
【问题描述】:
在 C# 中尝试对我的 List<> 进行排序时遇到了困难。
我有一个接口类型及其实现类:
public interface IRoom
{
// ...
}
public class Room : IRoom
{
// ...
}
还有一个基类供我的比较器使用:
public abstract class RoomComparer : IComparer<IRoom>
{
public RoomComparer()
{
}
public abstract int Compare(IRoom x, IRoom y);
}
还有它的两个孩子:
public class StandardMultipliedSquareMetersComparer : RoomComparer
{
public StandardMultipliedSquareMetersComparer()
{
}
public override int Compare(IRoom a, IRoom b)
{
// ...
}
}
public class SquareMetersComparer : RoomComparer
{
public SquareMetersComparer()
{
}
public override int Compare(IRoom a, IRoom b)
{
// ...
}
}
现在,问题从这里开始:我得到了一个泛型类 Hotel,其中包含我的 Room 实例列表:
public class Hotel<TRoom, TComparer> : IHotel, IEnumerable<TRoom>
where TRoom : IRoom
where TComparer : RoomComparer, new()
{
public List<TRoom> Rooms;
protected TComparer Comparer;
public Hotel(TRoom[] rooms)
{
Rooms = new List<TRoom>();
Rooms.AddRange(rooms);
Comparer = new TComparer();
Rooms.Sort(Comparer);
}
}
这就是问题所在 - 我在Rooms.Sort(Comparer); 线上遇到了两个错误:
错误 CS1502:最佳重载方法匹配 `System.Collections.Generic.List.Sort(System.Collections.Generic.IComparer)' 有一些无效参数 (CS1502)
错误 CS1503:参数
#1' cannot convertTComparer' 表达式为 键入“System.Collections.Generic.IComparer”(CS1503)
我尝试了许多不同的解决方案,但没有结果。发生了什么事?
注意:在 Ubuntu 上使用 Mono 3.10.0
【问题讨论】: