【发布时间】:2020-08-28 04:32:22
【问题描述】:
我有一个函数,它返回一个名为IPathfindingNode 的接口列表。
我创建了一个实现接口的结构:
public struct Node : IPathfindingNode
{
public int X { get; }
public int Y { get; }
}
我调用了一个返回接口列表的函数:
public List<IPathfindingNode> FindPath(Vector2Int startPoint, Vector2Int targetPoint)
当我尝试分配结果时,我收到一条错误消息,说我无法将它分配到我的列表中,但我不明白为什么。
List<Node> path = Map.FindPath(startPoint, targetPoint);
我收到此错误:
不能隐式转换类型 'System.Collections.Generic.List
' 到'System.Collections.Generic.List '
如何正确投射?我尝试了as List<Node>();,但仍然无法正确转换。
【问题讨论】:
-
为什么选择将
Node设为结构?当您将它添加到列表中时,它可以存储接口引用的唯一方法是将它装箱,这就是发生的情况。如果您试图避免分配,请知道它们无论如何都会发生。 -
课程不是也装箱了吗?我试图将它写在支持类或结构的地方,因为我试图写给任何人使用,人们可能出于任何原因使用结构或类。
-
装箱是一个值类型特性。它将 值类型 装箱(包装)在
object中,并将其放在堆上。 -
类总是分配在托管堆上,所以不需要装箱。装箱为托管堆上的值类型分配空间并将其复制到该内存。只要您知道结构在以这种方式使用时会被装箱并且不期望其他东西,那么您正在做的事情就很好。
-
有没有办法写它来禁止结构然后用于我的界面?
标签: c#