微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#:并非所有代码路径都返回一个值

我正在编写一个简单的WinForms应用程序,我允许用户在TreeView控件中拖动TreeNodes.我强制执行的规则之一是不允许用户将TreeNode拖动到其自己的子节点之一.我以递归样式编写了以下函数来检查目标节点的父级.在编译时,我得到错误,并非所有代码路径都返回此函数的值.据我所知,我对这个逻辑的每个可能的分支都有一个回复声明……但我显然是错的.请有人指出我的错误.

private bool IsDestinationNodeAChildOfdraggingNode(TreeNode draggingNode,TreeNode destinationNode) {
        if (draggingNode.Nodes.Count == 0) 
            return false;
        else {
            if (draggingNode.Nodes.Contains(destinationNode)) 
                return true;
            else {
                foreach (TreeNode node in draggingNode.Nodes) 
                    return IsDestinationNodeAChildOfdraggingNode(node,destinationNode);
            }
        }
    }

解决方法

其实我觉得你的算法错了.如果你只是要查看第一个值,为什么还要用foreach语句呢?此外,返回后的所有其他内容都是多余的,使代码更难以遵循.

我怀疑你要做的是更像这样的事情:

private bool IsDestinationNodeAChildOfdraggingNode(TreeNode draggingNode,TreeNode destinationNode) {
  // special case,no children
  if (draggingNode.Nodes.Count == 0) 
    return false;

  // check if the target is one of my children
  if (draggingNode.Nodes.Contains(destinationNode)) 
     return true;

  // recursively check each of my children to see if one of their descendants is the target
  foreach (TreeNode node in draggingNode.Nodes) 
    if (IsDestinationNodeAChildOfdraggingNode(node,destinationNode)) 
        return true;

  // didn't find anything
  return false;
}

有些人会坚持认为早期的回归是邪恶的,这将导致这个版本的功能

private bool IsDestinationNodeAChildOfdraggingNode(TreeNode draggingNode,TreeNode destinationNode) {
  bool retVal = false;

  if (draggingNode.Nodes.Count != 0) {

    // check if the target is one of my children
    if (draggingNode.Nodes.Contains(destinationNode)) {
      retVal = true;
    } else {

      // recursively check each of my children to see if one of their descendants is the target
      foreach (TreeNode node in draggingNode.Nodes) 
        if (IsDestinationNodeAChildOfdraggingNode(node,destinationNode)) {
          retVal = true;
          break;
        }
    }
  }

  return retVal;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐