所以我不确定这是否是我不理解的 C# 泛型问题,或者它是否与 Unity 编译器无法处理有关。我来自 C++,对 c# 有一点经验,但对泛型没有经验。
那么问题来了:我有一个名为 TurnOrderQueue 的通用类。简而言之,它是一个自定义队列,它根据传入的一些值对事物进行排序。(它位于名为 TurnOrderQueueNS 的命名空间中)
我有一个名为 IActor 的空界面(目前),它表示可以在回合制游戏中采取行动的事物。
最后,我有一个 TurnOrderManager,它处理所有的轮流顺序并拥有一个 TurnOrderQueue。
当我尝试使用 IActor 作为类型实例化 TurnOrderQueue 时,我得到一个无效的强制转换异常
public TurnOrderQueueNS.TurnOrderQueue<IActor> TurnOrder = new TurnOrderQueueNS.TurnOrderQueue<IActor>();
我在运行时得到的异常是:InvalidCastException:无法从源类型转换为目标类型。TurnOrderQueueNS.TurnOrderQueue`1[IActor]..ctor () TurnManager..ctor ()
你不能在 C# 中使用接口作为泛型类型,还是我错过了什么?
每个请求这里是 TurnOrderQueue.cs 编辑:删除了大部分类以显示问题的实质
public class TurnOrderQueue<t>: IComparer{
private SortedList<QueueItem<t>,t> turnOrderList;
private int currentTurnIndex = 0;
#region IComparer implementation
int IComparer.Compare (object x, object y)
{
return Compare ((QueueItem<t>)x, (QueueItem<t>)y );
}
#endregion
}
public struct QueueItem<t>
{
public int priorityValue;
public int tieBreakerValue;
public t item;
}
}