title: .NET Return value vs thrown Exception Design question
body: <p>Let's assume we have a method handling operations in a tree hierarchical data structure located in a class handling such a structure.</p>
  
  <p>Let's look closer at one of those methods:</p>
  
  <pre><code>void MoveNode(Node currentNode, Node newParentNode)
  {
      /* check if new parent isn't current's child already */
       if (newParentNode.LMargin &lt; currentNode.LMargin &amp;&amp; newParentNode.RMargin &gt; currentNode.RMargin)
       {
          //DO WORK
       }
       else throw new ArgumentException("New parent node cannot be current's own child");
  }
  </code></pre>
  
  <p>MSDN states: do not throw Exceptions to control the flow !</p>
  
  <p><strong>My question</strong>: is this use of ArgumentException alright in your opinion, or would you use some kind of a return value.
  If so, how would you supply the error/validation message.</p>