我一直在跑步风格警察一些Cusing指令应该位于命名空间内。

是否有技术原因将using指令位于命名空间内部而不是外部?

答案

两者之间实际上存在(微妙的)差异。

// File1.cs
using System;
namespace Outer.Inner
{
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }
}

现在假设有人将另一个文件 (File2.cs) 添加到项目中,如下所示:

// File2.cs
namespace Outer
{
    class Math
    {
    }
}

编译器搜索Outer在看那些之前using命名空间之外的指令,因此它发现Outer.Math代替System.MathOuter.Math没有PI成员,因此 File1 现在已损坏。

如果您将using在您的名称空间声明中,如下所示:

// File1b.cs
namespace Outer.Inner
{
    using System;
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }
}

现在编译器搜索System搜索之前Outer, 发现System.Math,一切都很好。

有些人会认为Math对于用户定义的类来说可能是一个坏名字,因为已经有一个System;差异,它会影响代码的可维护性。

注意到如果发生什么也很有趣Foo位于命名空间中Outer, 而不是Outer.InnerOuter.Math在 File2 中,无论在何处,都会破坏 File1using去。using指示。

来自: stackoverflow.com