C#存储对列表的引用<;T>;
我有一个大的四叉树结构,由指向更多列表的通用列表(C#存储对列表的引用<;T>;,c#,list,generics,casting,compiler-errors,C#,List,Generics,Casting,Compiler Errors,我有一个大的四叉树结构,由指向更多列表的通用列表(List)组成。这些列表包含在一个类中:TreeNode 在一个这样的树中,我存储类型为GameObject的对象 为了使树更新更快,我想在每个游戏对象上存储一个指向包含树节点的指针/引用,但是。。。我遇到了由TreeNode的泛型类型引起的问题 这里是我遇到问题的地方(在TreeNode类中): 我得到一个错误: Cannot implicitly convert type 'TreeNode<T>' to 'TreeNode<
List
)组成。这些列表包含在一个类中:TreeNode
在一个这样的树中,我存储类型为GameObject
的对象
为了使树更新更快,我想在每个游戏对象
上存储一个指向包含树节点
的指针/引用,但是。。。我遇到了由TreeNode
的泛型类型
引起的问题
这里是我遇到问题的地方(在TreeNode
类中):
我得到一个错误:
Cannot implicitly convert type 'TreeNode<T>' to 'TreeNode<GameObject>'
如果您不知道
TreeNode
的类型,我建议您创建一个非泛型基类。然后,您可以简单地将引用存储在GameObject中
铸造
我会避免它,但您可以使用操作符as
将TreeNode
强制转换为TreeNode
,如下所示:
public TreeNode<GameObject> treeNode;
gameObject.treeNode = this as TreeNode<GameObject>;
gameObject.treeNode=此为treeNode;
有点离题,但……上次我实现四叉树时,每个节点都位于大型阵列中。这大大加快了四叉树的速度。编辑:它是一个完全展开的四叉树。(更好的性能,更多的内存消耗)你能发布GameObject的代码或者至少是与treeNode属性相关的部分吗?Felix:谢谢,内存不应该是个问题,这样可以有所帮助。我想我可以在游戏对象上存储数组索引来指向它?那么node是游戏对象上的属性还是第一个代码片段中的treeNode?@Arachin您仍然可以使用直接引用。如果你愿意,你可以使用索引。完全扩展的四叉树的好处是移动、排序和访问游戏对象的速度。我没有找到原始源代码,但也许我以后会去寻找代码。是的,如果没有优雅的解决方案,那就是我的退路。重新编辑:我得到了同样的错误(无法转换类型
与无法隐式转换类型
)@Arachin Try作为
或先将其转换为对象。太棒了,“as”工作得很好。我甚至不知道这个关键词,谢谢:)为了简单起见,我不确定你是否想重新发布答案gameObject.treeNode=此为treeNode代码>效果很好。@Arachin编辑了我的文章以使其更清晰,但保留了ppl可能面临相同问题的其他可能性。
gameObject.treeNode = this as TreeNode<GameObject>;