【发布时间】:2019-11-15 22:29:36
【问题描述】:
我正在寻找一个撤销类,它包含板上所有对象的所有撤销动作。
设置:
public class UndoClass
{
public UndoLogging[] _Discs;
public TileParent[] _Tiles;
public UndoClass(UndoLogging[] discs, TileParent[] tiles)
{
_Discs = discs;
_Tiles = tiles;
}
}
class AddToList<T>
{
private List<T> list = new List<T>();
public void Add(T t)
{
list.Add(t);
}
}
TileParent 是一个父脚本,它下面有一堆不同的图块,因此每个图块都需要一个不同的撤消列表,其中包含需要撤消的变量。
如何在 TileParent 中创建通用列表,但在单个图块中使用特定类型的列表?
public class TileParent : MonoBehaviour
{
public AddToList<T> _UndoLog = new AddToList<T>();
}
public class BreakableTile : TileParent
{
struct MyLog
{
bool active;
}
public override void Awake()
{
base.Awake();
_UndoLog = new List<MyLog>();
}
}
这可能吗?
以上代码产生的错误是
TileParent.cs(12,24): error CS0246: The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)
谢谢
【问题讨论】:
-
不完全清楚您有什么问题...您发布的代码版本(已修复语法错误)是否会造成问题?
-
TileParent.cs(12,24):错误 CS0246:找不到类型或命名空间名称“T”(您是否缺少 using 指令或程序集引用?)
-
您忘记将
T声明为generic type。你的类应该像public class TileParent<T> ...然后确保T实现所需的类型/接口:public class TileParent<T> where T : UndoClass。还要确保记得根据需要进行投射(请参阅:Covariance and Contravariance in Generics)。