【问题标题】:C# store reference to List<T>C# 存储对 List<T> 的引用
【发布时间】:2012-02-01 15:12:23
【问题描述】:

我有一个大型四叉树结构,由指向更多列表等的通用列表 (List&lt;T&gt;) 组成。这些列表包含在一个类中:TreeNode&lt;T&gt;

在这样一棵树中,我存储GameObject 类型的对象。

为了使树更新更快,我想在每个 GameObject 上存储一个指向包含 TreeNode 的指针/引用,但是......我遇到了由泛型类型 &lt;T&gt; 引起的问题TreeNode

这是我遇到问题的地方(在TreeNode 类中):

contents.Add(typedObject);
if (typedObject is GameObject)
{
    GameObject gameObject = (GameObject) (object) typedObject;
    gameObject.treeNode = this;
}

我得到错误:

Cannot implicitly convert type 'TreeNode<T>' to 'TreeNode<GameObject>'

任何帮助或建议将不胜感激。谢谢。

编辑 --> 该节点存储在GameObject上,如下:

public TreeNode<GameObject> treeNode;

【问题讨论】:

  • 有点离题但是....上次我实现一个四叉树时,每个节点都在大数组中。这大大加快了四叉树的速度。编辑:它是一个完全扩展的四叉树。 (更好的性能,更多的内存消耗)
  • 你能发布 GameObject 的代码,或者至少发布与 treeNode 属性相关的部分吗?
  • Felix:谢谢,记忆不应该是个问题,所以这会有所帮助。我想我可以将数组索引存储在 GameObject 上以指向它?
  • 那么 node 是 GameObject 上的属性还是你的第一个 sn-p 中的 treeNode ?
  • @Arachin 您仍然可以使用直接参考。如果您愿意,可以使用索引。完全扩展的四叉树的好处是移动、排序和访问游戏对象时的速度。我没有找到原始来源,但也许我会稍后再寻找代码。

标签: c# list generics casting compiler-errors


【解决方案1】:

如果您不知道TreeNode&lt;T&gt; 的类型,我建议您创建一个非泛型基类。然后您可以简单地将引用存储在 GameObject 中。

铸造

我会避免它,但您可以使用运算符 asTreeNode&lt;T&gt; 转换为 TreeNode&lt;GameObject&gt;,如下所示:

gameObject.treeNode = this as TreeNode<GameObject>;

【讨论】:

  • 是的,如果没有优雅的解决方案,那是我的后备选择。
  • 重新编辑:我得到了同样的错误(Cannot convert type vs. Cannot implicitly convert type
  • @Arachin 尝试as 或先将其转换为对象。
  • 太棒了,'as' 完美运行。甚至不知道这个关键字,谢谢:) 为简单起见,不确定是否要重新发布答案。 gameObject.treeNode = this as TreeNode&lt;GameObject&gt;; 效果很好。
  • @Aracin 编辑了我的帖子以提高清晰度,但为可能面临相同问题的 ppl 保留了其他可能性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多