代码之家  ›  专栏  ›  技术社区  ›  DaveB

为什么要在系统名称空间中使用C#预定义类型而不是别名

c#
  •  13
  • DaveB  · 技术社区  · 14 年前

    System 命名空间。

    object NOT Object
    string NOT String
    int NOT Int32
    

    8 回复  |  直到 14 年前
        1
  •  6
  •   Alex    14 年前

    我想用“蓝色” int , string Int32.TryParse()

        2
  •  16
  •   Marc Gravell    14 年前

    主要时间是 意外地 不同的是当某人愚蠢到调用类型(或属性/字段等)时 String string 总是 global::System.String ,其中 可以是 YourNamespace.String .

    最接近C别名的是 @string ,它会像拇指一样突出。

    顺便说一句,这里有一个有趣的方式来捣乱任何人使用 dynamic

    using dynamic = System.Object;
    
        3
  •  13
  •   Jon Skeet    14 年前

    他们其实没什么不同。就我个人而言,我也用化名,但杰夫·里希特主张完全相反。生成的代码将 相同的。使用你认为最容易阅读的(并且尽量保持一致)。

    有一点大多数人都同意:在编写API时,使用类型名而不是别名,因此:

    int ReadInt32()
    

    而不是

    int ReadInt()
    

    这个 int 部分在这里并不重要-它不是名称的一部分,可以适当地显示给任何使用任何语言的消费者。。。但是 名称应该与语言无关,这意味着使用类型名称。

    一个你

    enum Foo : byte // Valid
    
    enum Foo : System.Byte // Invalid
    
        4
  •  8
  •   Jeffrey L Whitledge    14 年前

    var x = (Int32)-y;    // Does not compile.
    
    var x = (int)-y;      // Negates the value of y and casts as an int.
    

    这是因为C语言规范第7.6.6节中定义了语法消歧规则。

        5
  •  3
  •   Daniel A.A. Pelsmaeker    14 年前

    在参数、属性或方法签名或字段中指定类型时,我总是使用别名(所以:几乎无处不在) 除了 在这样的类型上调用静态成员时。

    String.Format("{0}", 1);
    Int32.Parse("123");
    String.IsNullOrEmpty(value);
    
        6
  •  1
  •   KeithS    14 年前

    public enum MyEnum : Byte {Value1, Value2} //does not compile
    
    public enum MyEnum : byte {Value1, Value2} //ok
    
        7
  •  0
  •   Matti Virkkunen    14 年前

    唯一的区别是它们更容易阅读(这当然是意见的问题)。编译的结果是完全相同的字节码。

        8
  •  0
  •   Carter Medlin    7 年前

    实体框架代码生成器使用预定义类型,因此如果您希望能够完全实现VisualStudio2017编码样式规则,则需要选择预定义类型(int而不是Int32等)。否则生成的代码将不符合要求。