したがって、これが私が理解していないC#ジェネリックの問題なのか、それともUnityコンパイラがそれを処理できないことに関係しているのかはわかりません。私は C++ 出身で、C# の経験は少しありますが、ジェネリックの経験はありません。
問題について: TurnOrderQueue というジェネリック クラスがあります。要するに、渡されたいくつかの値に基づいて物事を注文するカスタム Queue です。(TurnOrderQueueNS という名前空間にあります)
ターンベースのゲームでアクションを実行できるものを表す IActor と呼ばれる空の (今のところ) インターフェイスがあります。
最後に、ターンオーダーですべてを処理し、TurnOrderQueue を所有する TurnOrderManager があります。
タイプとして 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;
}
}