使用可空整数访问数组

时间:2015-05-05 19:09:48

标签: c# arrays types integer nullable

我正在尝试在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例如?

3 个答案:

答案 0 :(得分:1)

  

无法隐式转换类型'int?' 'int'。

你想比较一个int?到一个int。编译器本质上是在说“如果int?实际上是null,我应该怎么做这个比较。这是编译器无法解决的问题,所以你必须提供那个逻辑。

换句话说,既然您已经防止x为null,请使用

this.tree[x.Value]

答案 1 :(得分:0)

您有x != null约束,您只需要this.tree[x.Value]

并不清楚y是什么,但我怀疑你是否需要或想要(int)演员。此外,重要的是tree[x]newNode.key的类型。

  

使用可空类型访问数组索引是不合法的吗?

  

我可以以不同的方式初始化数组以允许它吗?

没有

  

或者我应该忘记null并使用-1例如?

这取决于。如果正确完成,两者都是可行的。

答案 2 :(得分:0)

检查变量HasValue是否存在使用Value

public int insert(Node newNode) // return array index of added node
    {
        int? y = null;
        int? x = this.root;

        while (x.HasValue)
        {
            y = x;
            if (newNode.key < this.tree[x.Value])
            {
               //your logic here
            }

        }

        return 0;
    }
相关问题