`using`指令的位置是否会对C#产生影响?

Hos*_*Aly 5 c# syntax

我在尝试对现有代码进行格式化时遇到错误.最初,代码具有using在命名空间外声明的指令:

using System.Collections.Generic;
namespace MyNamespace
{
    using IntPair = KeyValuePair<int, int>;
}
Run Code Online (Sandbox Code Playgroud)

当我试图using在语句中插入指令(以符合StyleCop的规则)时,我在别名指令中遇到错误,我必须完全限定它:

namespace MyNamespace
{
    using System.Collections.Generic;
    //using IntPair = KeyValuePair<int, int>;   // Error!
    using IntPair = System.Collections.Generic.KeyValuePair<int, int>; // works
}
Run Code Online (Sandbox Code Playgroud)

我想知道两种情况之间有什么区别?(import-style)using指令的位置是否重要?

Dav*_*cia 6

我曾经认为这没关系,但我总是完全符合使用命令.

编辑:检查C#规范,第9.4节说:

using-directive的范围特别不包括其peer-directives.因此,对等使用指令不会相互影响,并且它们的写入顺序是无关紧要的.

因此,如果将System.Collections.Generic和KeyValuePair视为对等,则KeyValuePair将忽略System.Collections.Generic.


Mar*_*ell 5

是的,它确实 - 在很小程度上.有关范围/本地名称的边缘情况,请参阅Eric Lippert的博客.

有关具体示例(特定于别名用法):

using System;
using Foo = Bar;
public static class Bar {
    public  static void Test() { Console.WriteLine("outer"); }
}
namespace MyNamespace {
    //using Foo = Bar;

    public static class Bar {
        public static void Test() { Console.WriteLine("inner"); }
    }
    static class Program {
        static void Main() {
            Foo.Test();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)