考虑以下包含属性Height
的类internal class TreeNode
{
public int value;
public TreeNode Left;
public TreeNode Right;
public int Height{get;private set}
}
初始化TreeNode
类型变量node
(即node==null
返回false)和TreeNode.Left =null
尝试node.Left.Height
将抛出NullRefrenceException,是否有任何直接方式,以便我可以从空引用对象访问属性Height,以便node.Left.Height
返回-1。
我知道一种方法是使用带有签名int getHeight(TreeNode node)
的函数,我可以检查节点是否为null。但我想使用node.Left.Height
种表达式来返回所需的值。
答案 0 :(得分:4)
你问如何获得未定义对象的高度?这根本不可能。就像你不能测量建筑物的高度一样。
坚持基于方法的方法。或者在类中创建一个属性,如下所示:
public int LeftHeight
{
get
{
return Left == null ? -1 : Left.Height;
}
}
答案 1 :(得分:1)
您可以实现从不返回null的Left和Right属性。
private TreeNode _left;
private TreeNode _right;
public TreeNode Left
{
get
{
return _left ?? new TreeNode() { Height = -1 };
}
set
{
_left = value;
}
}
public TreeNode Right
{
get
{
return _right ?? new TreeNode() { Height = -1 };
}
set
{
_right = value;
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
有些人提出了类似的建议,但你可以做一些像
这样的事情text?.Length ?? -1
如果text为null,则它将给出默认值-1。没有办法“直接”做text.Length虽然 - 这没有意义,因为没有对象来获取的长度。
作为类比,如果我问你住在威斯康星州密尔沃基的独角兽的高度是多少,你会怎么回答?显然,在威斯康星州密尔沃基, 没有独角兽可以获得高度,所以除了“没有这样的独角兽”之外,没有办法给出有意义的答案。