<t>There is actually a (subtle) difference between the two. Imagine you have the following code in File1.cs:<br/>
<br/>
// File1.cs<br/>
using System;<br/>
namespace Outer.Inner<br/>
{<br/>
class Foo<br/>
{<br/>
static void Bar()<br/>
{<br/>
double d = Math.PI;<br/>
}<br/>
}<br/>
}<br/>
<br/>
```<br/>
<br/>
Now imagine that someone adds another file (File2.cs) to the project that looks like this:<br/>
<br/>
```<br/>
// File2.cs<br/>
namespace Outer<br/>
{<br/>
class Math<br/>
{<br/>
}<br/>
}<br/>
<br/>
```<br/>
<br/>
The compiler searches `Outer` before looking at those `using` directives outside the namespace, so it finds `Outer.Math` instead of `System.Math`. Unfortunately (or perhaps fortunately?), `Outer.Math` has no `PI` member, so File1 is now broken.<br/>
<br/>
This changes if you put the `using` inside your namespace declaration, as follows:<br/>
<br/>
```<br/>
// File1b.cs<br/>
namespace Outer.Inner<br/>
{<br/>
using System;<br/>
class Foo<br/>
{<br/>
static void Bar()<br/>
{<br/>
double d = Math.PI;<br/>
}<br/>
}<br/>
}<br/>
<br/>
```<br/>
<br/>
Now the compiler searches `System` before searching `Outer`, finds `System.Math`, and all is well.<br/>
<br/>
Some would argue that `Math` might be a bad name for a user-defined class, since there's already one in `System`; the point here is just that there *is* a difference, and it affects the maintainability of your code.<br/>
<br/>
It's also interesting to note what happens if `Foo` is in namespace `Outer`, rather than `Outer.Inner`. In that case, adding `Outer.Math` in File2 breaks File1 regardless of where the `using` goes. This implies that the compiler searches the innermost enclosing namespace before it looks at any `using` directive.</t>