【发布时间】:2015-07-15 16:16:42
【问题描述】:
我正在尝试在 C# 中实现二叉搜索树,并按照 Cormen 等人的第 12 章进行操作。为此,我需要使用可为空的类型,如下所示:
public int insert(Node newNode) // return array index of added node
{
int? y = null;
int? x = this.root;
while (x != null)
{
y = (int)x;
if (newNode.key < this.tree[x])
{ }
}
return 0;
}
现在我收到以下错误:
不能隐式转换类型“int?”到'int'。 存在显式转换(您是否缺少演员表)?
为此if (newNode.key < this.tree[x]) 线路。
使用可空类型访问数组索引是否违法?
我可以以不同的方式初始化数组以允许它吗?
或者我应该忘记 null 并使用 -1 例如?
【问题讨论】:
-
参考
Nullabletypes,确保不为空后尝试x.Value。 -
如果您想真正学习数据结构和算法,我建议您在非托管环境中进行此练习。
-
@aj.toulan:为什么?大多数(如果不是全部)常见算法都可以在托管环境中很好地实现。这样做的好处是,您可以专注于实际算法,而不必担心正确管理内存。
-
我不明白为什么这个问题会得到 -1。 MSDN 文档没有明确说明是否可以使用可为空的 int 来访问数组索引,所以我认为这是一个合理的问题。如果我不是在这里学习,我显然不会问这个问题......
-
我不知道他们为什么给你一个-1。但是要回答您的问题,.net 中的可为空类型实际上只是一个具有两个组件的结构,即实现的类型数据(在本例中为 int)和表示数据是否有效的 bool。数组的实现根本不知道可为空的 int 是什么,如果它为空,也不知道如何处理该值。就个人而言,我宁愿我的代码刹车进行转换,也不愿抛出一些异常,说这个值没有设置。它迫使程序员更多地思考他们想要什么。最后,它减少了技术债务。
标签: c# arrays types integer nullable